2012-01-22 4 views
2

14 개의 다른 언어를 포함하는 Python (ver2.6.6)에 UTF-8로 저장된 파일을로드하려고합니다. 파이썬 codecs 모듈을 사용하여 txt 파일을 디코딩합니다.Python 코덱 모듈

import codecs 
f = open('C:/temp/list_test.txt', 'r') 
    for lines in f: 
     line=filter_str(lines.decode("utf-8") 

이 모두 제대로 작동합니다. 전체 파일을 구문 분석 한 다음 14 개의 다른 언어 파일을 내보내려고합니다. 내가 이해할 수없는 문제는 내가 출력을위한 다음 코드를 사용하여 다음과 같은

입니다 :

malangout = codecs.open("C:/temp/'polish.txt",'w','utf-8','surrogateescape') 
    for item in lang_dic['English']: 
     temp = lang_dic[lang1][item] 
     malangout.write(temp + '\n') 
    malangout.close() 

예 :

  • 언어 : 폴란드어
  • 예상 출력 : Dziennik는
  • 을 zakłóceń
  • 실제 출력 : Dziennik zak,óceƒ
0 내가 파이썬 문서 (7.8 코덱)에서 많은 인코딩을 시도

u'Dziennik zak\u201a\xf3ce\u0192' 

: 그대로

문자열이 저장됩니다. 모든 정보는이 시점에서 도움이 될 것입니다. 문자열로 저장됩니다

+0

메모에서 "ASCII 파일을 메모장에 저장합니다.": ascii는 utf8의 하위 집합으로 문제가되지 않습니다. "ascii"대신 "ANSI"를 의미합니까? 'import locale '의 결과는 무엇입니까? print (locale.getpreferredencoding())'을 사용하고 계십니까? –

답변

1

은 다음과 같습니다

u'Dziennik zak\u201a\xf3ce\u0192' 

음, 그래서 그것이 보이는 반면에

In [25]: print(u'Dziennik zak\u201a\xf3ce\u0192') 
Dziennik zak‚óceƒ 

이후

In [26]: print(u'Dziennik zak\u0142\xf3ce\u0144') 
Dziennik zakłóceń 

에 대한 문제입니다 저장중인 유니 코드 부정확하다. C:/temp/list_test.txt에 맞습니까? 즉, list_test.txt

In [28]: u'Dziennik zak\u201a\xf3ce\u0192'.encode('utf-8') 
Out[28]: 'Dziennik zak\xe2\x80\x9a\xc3\xb3ce\xc6\x92' 

또는

In [27]: u'Dziennik zak\u0142\xf3ce\u0144'.encode('utf-8') 
Out[27]: 'Dziennik zak\xc5\x82\xc3\xb3ce\xc5\x84' 

이 포함되어 있습니까?


추신. 당신은 분명히 두 unicode가 함께 unicode를 형성하기 위해 추가 할

temp + '\n' 

temp + u'\n' 

에 변경할 수 있습니다. 위의 두 줄은 Python2에서 같은 결과를 얻었지만 Python3에서는 unicodestr을 함께 사용하면 TypeError가됩니다. Python3에서 '\n'unicode이라하더라도, Python3으로 전환 할 때의 어려움은 unicodestr의 혼합에 대한 정신적 태도를 바꿀 것이라고 생각합니다. Python2에서는 자동으로 시도되지만 Python3에서는 허용되지 않습니다.

+0

당신은 좋은 지적을 제기합니다. 그 방법으로 저장됩니다. UTF-8로 ASCII 파일을 메모장에 저장하면 내가 할 수 있다고 생각하지 않습니다. – user1163567

+0

UTF-8로 저장하기 전에 특별한 재 매핑을해야합니까? – user1163567

+0

파이썬 코드가 전반적으로 잘 보입니다 (위의 PS 참조). 게시물에 들여 쓰기 문제가있을 수 있지만 그 외에는 문제가 발생하지 않습니다. – unutbu