2013-01-23 2 views
2

내장 open() 함수를 사용하여 파이썬 3.3에서 UCS-2 BE 파일 (레거시 파일)을 디코드 할 수없는 것처럼 보입니다. UnicodeDecodeError 및 내 readLine() 메서드 포함) - 실제로이 인코딩 지정 플래그를 찾을 수 없습니다.Python 3 : UCS-2 (BE) 파일 읽기

Windows 8을 사용하는 경우 터미널은 'Lucida Console'글꼴을 사용하여 코드 페이지 65001로 설정됩니다.

코드가 너무 많이 도움이되지 않습니다 같아요 :

def display_resource(): 
    f = open(r'D:\workspace\resources\JP.res', encoding=<??tried_several??>) 
    while True: 
     line = f.readline() 
     if len(line) == 0: 
      break 

이 문제에 어떤 통찰력을 감상.

답변

10

UCS-2 is UTF-16 실제로 어떤 경우에도 UCS-2로 불렸을 때 할당 된 모든 코드 포인트에 대해.

encoding='utf16'으로 엽니 다. BOM이 없으면 (시작 부분에 Byte order mark, 2 바이트, BE는 \xfe\xff), encoding='utf_16_be'을 사용하여 바이트 순서를 강제합니다.

+0

안녕하세요 Martijn, 나는 또한 UTF16이 작동해야한다고 생각했습니다 (연결된 동일한 기사를 기반으로). 그리고 그것은 작동하지만, utf_16_be와 마찬가지로 모든 일본어 문자에 대해 동일한 문자를 화면에 표시합니다. 예를 들어 "브라 우저"는 똑같은 "읽을 수없는"문자 (사각형)가됩니다. 나는 두 사람의 구별을 다시해야했는데, 선을 읽고 그것을 인쇄해야했습니다. 이것은 또한 단말기의 한계입니까? 앞으로도 읽기 작업이 정상적으로 작동하고 문자열로 작업 할 수 있다면 다른 UCS2 파일로 다시 작성하고 UCS2 지원 편집기에서 "올바른"출력을 얻을 수 있습니까? –

+0

터미널의 한계입니다. 두렵습니다. 글꼴은 해당 문자를 지원하지 않습니다. 당신은 다른 글꼴을 찾아야 할 것입니다. 터미널에 표시 할 수 없기 때문에 데이터 자체가 손상된 것은 아닙니다. 그렇기 때문에 파일에 쓸 때 UTF-16으로 다시 인코딩하면 다른 도구로 다시 열 수 있습니다. –

+0

고맙습니다, Martijn. 매우 감사! –