2017-12-28 13 views
0

파이썬에서 인코딩에 관한 또 다른 질문은 제 생각입니다. 나는이 프로그램을 가지고있다 :파이썬 디코딩 및 인코딩, 요소 목록 utf-8

regex = re.compile(ur'\b[sw]\w+', flags= re.U | re.I) 
ergebnisliste = [] 
for line in fileobject: 
    print str(line) 
    erg = regex.findall(line) 
    ergebnisliste = ergebnisliste + erg 
ergebnislistesortiert = sorted(ergebnisliste, key=lambda x: len(x)) 
print ergebnislistesortiert 
fileobject.close() 

나는 s 또는 w로 시작하는 단어를 찾기 위해 텍스트 파일을 찾고있다. 내 "ergebnislistesortiert"정렬 된 결과 목록입니다. I는 결과리스트를 출력하고, 부호화에 문제가 발생한 appers 것이다

[ '이므로', 'WER', 'SP의 \의 XC3']

'SP의 \ xc3 'spät으로 인쇄해야합니다. 여기서 뭐가 잘못 됐니? 왜 목록 요소는 utf-8입니까?

그리고 어떻게 "spät"를 인쇄 할 수있는 올바른 디코딩을 할 수 있습니까?

고마워요!

답변

1

\xc3은 UTF-8이 아닙니다. 이것은 완전한 UTF-8 인코딩 인 U+00E4의 조각입니다.하지만 Latin-1 디코더 (인코딩을 지정하지 않고 바이트를 읽는 경우 실제로 파이썬 2가 수행하는 기능)와 같이 읽는 것이 좋습니다.이 경우 두 번째 UTF-8 시퀀스의 바이트가 \w과 일치하지 않습니다.

진짜 해결 방법은 처음에 파이썬으로 읽을 때 데이터를 디코딩하는 것입니다. 새로운 코드를 작성한다면 Python 3로 전환하는 것이 아마도 가장 쉽고 쉬운 해결책 일 것입니다.

당신은 파이썬 2.7에 붙어있는 경우 어느 정도 파이썬 3 호환 방식은

import io 
fileobject = io.open(filename, encoding='utf-8') 

당신이 입력 파일을 제어 할 수와 나이가 될 때까지 적절한 솔루션을 연기하려는 경우 같은, (부모에게 허가를 요청하십시오) UTF-8 입력 파일을 기존의 8 비트 인코딩으로 변환하십시오.