내 프로그램은 다양한 인코딩을 사용하는 파일을 읽어야합니다. ANSI, UTF-8 또는 UTF-16 (크거나 작은 엔디안) 일 수 있습니다.
BOM (Byte Order Mark)이있을 때 아무런 문제가 없습니다. 나는 파일이 UTF-8 또는 UTF-16 BE인지 또는 LE인지 안다.
파일이 ANSI 인 BOM이 없을 때 가정하고 싶었습니다. 그러나 내가 다루고있는 파일이 종종 BOM이 누락 된 것으로 나타났습니다. 따라서 BOM이 없으면 파일이 ANSI, UTF-8, UTF-16 BE 또는 LE임을 의미 할 수 있습니다.
파일에 BOM이없는 경우 파일의 일부를 스캔하고 인코딩 형식을 가장 정확하게 추측하는 가장 좋은 방법은 무엇입니까? 파일이 ANSI이면 100 % 가까운 시간, UTF 형식 인 경우 90 %를 높이고 싶습니다.
이것을 결정하는 일반적인 알고리즘 방식을 찾고 있습니다. 하지만 실제로는 유니 코드를 알고 있고 TEncoding 클래스를 가지고있는 Delphi 2009를 사용합니다. 따라서 특정 사항은 보너스가됩니다.
대답:
ShreevatsaR의 답변으로 Google에서 "universal encoding detector delphi"를 검색하여 약 45 분 동안 살아남은 후 #1 위치에이 게시물이 올라 있다는 사실에 놀랐습니다! 그건 빠른 googlebotting입니다 !! 또한 Stackoverflow가 매우 빠르게 1 위를 차지한다는 것도 놀라운 사실입니다.
Google의 2 번째 항목은 Fred Eaker의 블로그 항목입니다.문자 인코딩 감지알고리즘을 여러 언어로 나열했습니다.
나는 그 페이지에서 Delphi에 대한 언급을 발견했다.SourceForge에서 무료 OpenSource ChsDet Charset Detector델파이로 작성되었으며 모질라의 i18n 구성 요소를 기반으로합니다.
환상적! 고맙습니다. (모두 +1), 감사합니다 ShreevatsaR, 그리고 Stackoverflow, 1 시간 이내에 내 답을 찾을 수 있도록 도와 주셔서 다시 한번 감사드립니다!
어쩌면 당신은 파이썬 스크립트를 사용할 수 있습니다.Chardet : 범용 인코딩 감지기. Firefox에서 사용하는 문자 인코딩 감지 기능을 다시 구현 한 것으로,다양한 애플리케이션. 유용한 링크:모질라 코드,연구 논문(아이러니하게도, 파이어 폭스는 그 페이지의 인코딩을 정확하게 감지하지 못한다.)간단한 설명,상해.
여기있다.어떻게 메모장 않습니다
또한파이썬 범용 인코딩 검출기당신이 확인할 수 있습니다.
내 생각 엔 :
ASCII? 현대 OS에서는 더 이상 ASCII를 사용하지 않습니다. 그들은 모두 UTF-8, ISOLatinX, WinLatinX, MacRoman, Shift-JIS 또는 다른 어떤 것이 든 8 비트 코드를 사용합니다.
내가 아는 유일한 테스트는 잘못된 UTF-8 문자를 확인하는 것입니다. 어떤 것을 발견하면 UTF-8이 될 수 없다는 것을 알게됩니다. 같은 것이 UTF-16에서 가능합니다. 그러나 유니 코드가 설정되어 있지 않으면 어떤 Windows 코드 페이지인지 알기가 어려울 수 있습니다.
대부분의 편집자는 사용자가 가능한 모든 인코딩의 목록에서 기본값을 선택하게하여이 문제를 해결합니다.
UTF 문자의 유효성을 검사하는 코드가 있습니다.