5

"\ xaf", "\ xbe"와 같은 문자가 포함 된 텍스트가 있는데, 이는 this question에서 알 수 있듯이 ASCII로 인코딩 된 문자입니다.파이썬에서 xXY 인코딩 된 문자를 UTF-8로 변환하는 방법은 무엇입니까?

파이썬에서 UTF-8로 변환하고 싶습니다. 보통 string.encode("utf-8")UnicodeDecodeError입니다. 예를 들어 codecs 표준 라이브러리와 같은 더 좋은 방법이 있습니까?

샘플 200 characters here.

+0

샘플이 포함되지 않는'\ xaf' 또는 같은. 그런 성격의 표본이 있습니까? – dkarp

+0

샘플 데이터 *는 * 유효한 UTF-8입니다. "레코드 분리 기호"및 "단위 분리 기호"제어 문자가있는 경우. – dan04

+0

'enca' (http://linux.die.net/man/1/enca)에 따르면, UTF-8은 "비 텍스트 데이터로 둘러싸여/혼합되어 있습니다". –

답변

2

파일은 이미 UTF-8로 인코딩 된 파일입니다. 알 수없는 이름에 작성

# saved encoding-sample to /tmp/encoding-sample 
import codecs 
fp= codecs.open("/tmp/encoding-sample", "r", "utf8") 
data= fp.read() 

import unicodedata as ud 

chars= sorted(set(data)) 
for char in chars: 
    try: 
     charname= ud.name(char) 
    except ValueError: 
     charname= "<unknown>" 
    sys.stdout.write("char U%04x %s\n" % (ord(char), charname)) 

그리고 수동 :
이 문자 U000a 라인 피드
문자 U001e 정보 SEPARATOR 두
문자 U001f 정보 SEPARATOR는 ONE

+0

감사합니다. 제가 제공 한 짧은 샘플은 UTF-8입니다. 그러나 불행히도 전체 파일에서 다른 인코딩 (대부분 Windows-1250)으로 인코딩 된 부분이 있습니다. 나는''string ''을 시도하여 이것을 해결했다.decode()'를 호출하고, 모든 것이 실패하면'chardet' 라이브러리로 인코딩을 추측합니다. –

2

ASCII가 아닙니다 (ASCII 코드는 최대 127, \xaf은 175). 먼저 올바른 인코딩을 찾아서 디코딩 한 다음 UTF-8로 다시 인코딩해야합니다.

실제 문자열 샘플을 제공해 주시겠습니까? 그러면 현재 인코딩을 추측 할 수 있습니다.

+0

짧은 샘플에 대한 링크를 추가하는 질문을 편집했습니다. –

+0

그 샘플은 독점적 인 형식과 같이 나에게 인코딩 된 텍스트처럼 보이지 않습니다. –

+0

MARC 형식이어야합니다 (http://www.loc.gov/marc/). 'enca'로 인코딩을 탐지하려 할 때, 대부분 텍스트가 아닌 문자가 섞인 UTF-8이라고 응답했습니다. –

3

.encode은 바이트 열 (2.X에서 str, 3.X에 bytes)를 유니 코드 문자열 (2.X에서 unicode, 3.X에 str)을 변환한다.

2.x에서는 str 개체에서 .encode을 호출하는 것이 적합합니다. 파이썬은 암시 적으로 문자열을 유니 코드로 먼저 디코드합니다. s.encode(e)은 마치 s.decode(sys.getdefaultencoding()).encode(e)으로 작성되었습니다.

문제는 기본 인코딩이 "ascii"이고 문자열에 비 ASCII 문자가 포함되어 있다는 것입니다. 명시 적으로 올바른 인코딩을 지정하여이를 해결할 수 있습니다.

>>> '\xAF \xBE'.decode('ISO-8859-1').encode('UTF-8') 
'\xc2\xaf \xc2\xbe' 
+0

괜찮지 만 나머지 텍스트는 UTF-8로 인코딩됩니다 (적어도 이것은 enca에 의해보고되었습니다). 따라서이 절차는 전체 텍스트에 적용 할 수 없습니다. –

+2

그래서 \ xXY 문자는 ISO-8859-1입니까? –

관련 문제