Python 2/3을 사용하여 ANSI 및 UTF-16LE 파일을 구문 분석하는 가장 좋은 방법?

StackOverflow https://stackoverflow.com/questions/819396

  •  03-07-2019
  •  | 
  •  

문제

ANSI 또는 UTF-16LE에 인코딩 된 파일 모음이 있습니다. Python이 올바른 인코딩을 사용하여 파일을 열기를 바랍니다. 문제는 ANSI 파일이 UTF-16LE를 사용하여 인코딩 할 때 어떤 종류의 예외도 발생하지 않고 그 반대도 마찬가지입니다.

올바른 파일 인코딩을 사용하여 파일을 열 수있는 간단한 방법이 있습니까?

도움이 되었습니까?

해결책

사용 Chardet 인코딩을 감지하는 라이브러리.

다른 팁

당신은 그것을 확인할 수 있습니다 BOM 파일의 시작 부분에서 UTF인지 확인하십시오.

그 다음에 유니 코드 .decode 따라서 (하나를 사용하여 표준 인코딩).

편집하다또는, s.decode ( 'ascii')를 시도해보십시오 (s는 변수 이름입니다). UnicodedEcodeerror를 던지면 'UTF_16_LE'로 해독하십시오.

파일에 무엇이 있습니까? 라틴 기반 알파벳의 일반 텍스트 인 경우 거의 모든 바이트는 UTF-16LE 파일이 0이됩니다. 반면에 Windows-1252 파일에서는 0을 전혀 볼 것으로 기대하지 않을 것입니다. 예를 들어, 여기 있습니다 “Hello” Windows-1252에서 :

93 48 65 6C 6C 6F 94

... 그리고 UTF-16le에서 :

1C 20 48 00 65 00 6C 00 6C 00 6F 00 1D 20

곱슬 인용문 외에도 각 캐릭터는 동일한 값으로 맵핑되며 후행 제로 바이트를 추가합니다. 사실, ISO-8859-1 문자 세트의 모든 캐릭터에 대해 사실입니다 (Windows-1252는 ISO-8859-1을 확장하여 곱슬 인용문과 같은 여러 인용 문자에 대한 매핑을 추가하여 범위의 제어 문자를 대체합니다. 0x80..0x9F).

모든 파일이 Windows-1252 또는 UTF-16le이라는 것을 알고 있다면, 제로에 대한 빠른 스캔만으로도 어떤 것이 있는지 알아 내야합니다. Chardet이 너무 느리고 복잡한 이유가 있지만,이 경우에는 빠르고 더러움으로 도망 갈 수 있다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top