2012-03-27 3 views
1

utf-8로 인코딩 된 텍스트 파일을 읽었습니다. 일부 라인은 latin-1로만 디코딩 될 수 있습니다. 나는 이것이 매우 나쁜 습관이라고 말하지만 그럼에도 불구하고 나는 그것에 대처해야만한다.다중 인코딩을 사용하는 파일

나는 다음과 같은 질문이 :

첫째 : 어떻게 파일의 인코딩을 "추측"할 수 있습니까? 나는 enca을 시도했지만 내 컴퓨터에서있다 : 라틴어-1 감지하는 것만으로는 충분하지 않습니다

enca --list languages 
belarussian: CP1251 IBM866 ISO-8859-5 KOI8-UNI maccyr IBM855 KOI8-U 
    bulgarian: CP1251 ISO-8859-5 IBM855 maccyr ECMA-113 
     czech: ISO-8859-2 CP1250 IBM852 KEYBCS2 macce KOI-8_CS_2 CORK 
    estonian: ISO-8859-4 CP1257 IBM775 ISO-8859-13 macce baltic 
    croatian: CP1250 ISO-8859-2 IBM852 macce CORK 
    hungarian: ISO-8859-2 CP1250 IBM852 macce CORK 
lithuanian: CP1257 ISO-8859-4 IBM775 ISO-8859-13 macce baltic 
    latvian: CP1257 ISO-8859-4 IBM775 ISO-8859-13 macce baltic 
    polish: ISO-8859-2 CP1250 IBM852 macce ISO-8859-13 ISO-8859-16 baltic CORK 
    russian: KOI8-R CP1251 ISO-8859-5 IBM866 maccyr 
    slovak: CP1250 ISO-8859-2 IBM852 KEYBCS2 macce KOI-8_CS_2 CORK 
    slovene: ISO-8859-2 CP1250 IBM852 macce CORK 
    ukrainian: CP1251 IBM855 ISO-8859-5 CP1125 KOI8-U maccyr 
    chinese: GBK BIG5 HZ 
     none: 

합니다. 덧붙여서 : enca에 사용할 수있는 언어 목록을 늘리려면 어떻게해야합니까?

두 번째 : 파일을 부분적으로 다른 인코딩으로 인코딩 할 수 있습니까? 기술적 인 관점에서 볼 때 이것은 매우 가능하다고 생각합니다. 파일의 다른 부분에 다른 코덱을 사용하기 만하면됩니다. 이걸 본 적이 있니? 그런 파일을 어떻게 읽으시겠습니까? 다른 인코딩으로 각 행을 디코딩하려고합니까? 어떻게 이것에 대해 가겠습니까? 나는 실제로 파이썬을 사용하고 있으며 다중 인코딩을 처리하는 예제는 높이 평가 될 것이다.

셋째 : 일반적으로 사용하는 인코딩을 모르는 파일은 어떻게합니까? 다른 소스에서 텍스트 파일을 다운로드 할 때이 문제가 자주 발생합니다. 일반적으로 스프레드 시트에서 내 보낸 CSV 파일 (Excel 같음)이지만 내보내기 매개 변수에 따라 어떤 인코딩인지 또는 다른 인코딩을 사용하는지, 힌트는 선택되지 않았으므로 추측해야합니다.

답변

2
  1. 파일 인코딩 텍스트를 추측 하시겠습니까? 파이썬, 펄, 자바, C? 이로 인해 예기치 않은 결과가 발생하는 경우가 있습니다 (예 : the "bush hid the facts" bug)
  2. 파일의 인코딩 방식이 다른 경우가 있습니다. 파일 형식은 파일의 다른 부분에 대해 서로 다른 인코딩을 지정하거나 형식으로 인코딩 스위치를 지정할 수 있습니다. 예를 들어 MIME에서 헤더 키는 ascii이고 헤더 값은 다른 인코딩으로 인코딩 된 포함 된 섹션을 가질 수 있으며 컨텐츠의 인코딩은 Content-Type 헤더에 선언됩니다.
  3. 인코딩을 모르는 경우 인코딩을 결정할 때까지 파일에서 바이트를 (바이너리 안전 방식으로) 버퍼로 읽어야합니다.
+0

어떻게 바이너리 버퍼의 인코딩을 결정합니까? – dangonfast

+0

추론, 추측 및 통계 분석. 일반적으로 라이브러리 나 도우미 프로그램을 사용합니다. 따라서 첫 번째 질문 : 어떤 기술을 사용하고 있습니까? – Joni

+0

나는 파이썬을 사용하고 있지만, 파일에 사용 된 인코딩을 발견하는 * 모든 * 방법이 필요합니다. – dangonfast

0

"부분 인코딩이 다른 인코딩"이라고 말하면 UTF-8뿐 아니라 확실합니까? UTF-8은 문자의 복잡도에 따라 1 바이트, 2 바이트 및 4 바이트 이상의 인코딩을 혼합하므로 ASCII/라틴 -1처럼 보이고 일부는 유니 코드처럼 보입니다.

http://www.joelonsoftware.com/articles/Unicode.html

편집 : 다운로드 일반 텍스트 파일의 인코딩을 추측, 나는 보통 크롬이나 파이어 폭스에서 열. 그들은 많은 인코딩을 지원하며 올바른 인코딩을 잘 선택합니다. 그런 다음 유니 코드로 인코딩 된 파일로 내용을 복사 할 수 있습니다.

+0

글쎄, 진실을 말하고 싶습니다. , 나는 확실하지 않다. utf-8로, 그리고 latin-1로, 파일의 다른 부분에서 디코딩하는 데 문제가 있음을 압니다.내가 원하는 것은 파일의 인코딩을 얻는 확실한 방법입니다. 그리고 파일에 여러 인코딩이있는 경우이를 알고 싶습니다. 어쩌면 이것은 불가능할 수도 있지만, 나는 모른다. – dangonfast

관련 문제