나는 문제를 보여주기 위해 단순화 된 버전을 작성했습니다. utf-8 및 UTF-16 형식의 특수 문자를 인코딩 중입니다.이상한 주요 문자 utf - 8/utf - 16 인코딩 파이썬에서
utf-8 인코딩에는 문제가 없습니다. UTF-16으로 인코딩 할 때 이상한 주요 문자가 나타납니다.
모든 후행 문자 및 주요 문자를 제거하려고했지만 오류가 계속 발생합니다. 코드의
샘플 : 출력의
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
import chardet
def myEncode(s, pattern):
try:
s.strip()
u = unicode(s, pattern)
print chardet.detect(u.encode(pattern, 'strict'))
return u.encode(pattern, 'strict')
except UnicodeDecodeError as err:
return "UnicodeDecodeError: ", err
except Exception as err:
return "ExceptionError: ", err
print myEncode(r"""Test !"#$%&'()*+-,./:;<=>[email protected][\]?_{@}~& € ÄÖÜ äöüß £¥§""",
'utf-8')
print myEncode(r"""Test !"#$%&'()*+-,./:;<=>[email protected][\]?_{@}~& € ÄÖÜ äöüß £¥§""",
'utf-16')
샘플 : 내가 잘못 가고
{'confidence': 0.99, 'language': '', 'encoding': 'utf-8'}
Test !"#$%&'()*+-,./:;<=>[email protected][\]?_{@}~& € ÄÖÜ äöüß £¥§
{'confidence': 1.0, 'language': '', 'encoding': 'UTF-16'}
��Test !"#$%&'()*+-,./:;<=>[email protected][\]?_{@}~& € ÄÖÜ äöüß £¥§
나는 그것을 알아낼 수 없습니다. 나는 UTF-16을 UTF-8로 다시 변환하고 싶지 않다. UTF-16으로 포맷을 유지하는 것이 중요하다.
업데이트 : @ 트위터 덕분에 내 문제의 해결책은 인코딩 UTF-16le 또는 UTF-16be를 정의하는 것입니다. 시간과 노력에 다시 한번 감사드립니다.
시간과 노력에 감사드립니다.
는 바이트 순서 마크가 아닌가? (일명 BOM) –
코드의 들여 쓰기가 잘못되었습니다. 검토하십시오. 코드 블록을 복사/붙여 넣기 한 다음 Ctrl 키를 누른 채로 코드 블록을 모두 들여 쓰기하면 보통 좋은 결과를 얻을 수 있습니다. – tripleee
실제 바이트가 무엇인지 말하는 것은 아니며 UTF-16le 또는 UTF-16be인지 지정하지 않습니다. 터미널 문자 집합도 여기에서 재생됩니다. UTF-16 [BOM] (https://en.wikipedia.org/wiki/Byte_order_mark)의 실제 바이트는 0xff 0xfe이고 순서는 바이트 순서에 달려 있습니다. – tripleee