파일에서 어떤 인코딩이 사용되는지 확인하는 방법


23

비디오 omxplayer의 자막 파일에 문제가있었습니다. 그것을 해결하기 위해 windows-1250에서 UTF-8 인코딩으로 변환해야했습니다. 내 질문은 어떤 인코딩이 사용되는지 특정 파일을 어떻게 볼 수 있습니까?


piconv인코딩을 변경하려면;)
Rinzwind

예. 이미 인코딩을 변경했습니다 (1 파일). 그러나 나는 이것들을 많이 가지고 있으며, 그것들을 모두 제어하고 필요한 경우 은밀하게 작은 스크립트를 만들고 싶었습니다. 그러나 나는 그것들을 모두 변환 할 수 있다고 생각합니다. 일부가 이미 UTF-8 인 경우 아무런 해가 없습니다. 권리?
NonStandardModel

문제 없습니다 :) 그냥 와일드 카드를 사용하십시오
Rinzwind

답변:


26

파일이 원래 X 인코딩으로 작성된 것인지 자동으로 알 수 없습니다.

그래도 쉽게 할 수있는 일은 특정 코덱을 사용하여 전체 파일을 어떻게 든 성공적으로 디코딩 할 수 있는지 여부를 확인하는 것입니다. 주어진 인코딩에 유효하지 않은 바이트를 찾으면 다른 바이트 여야합니다.

문제는 많은 코덱이 비슷하고 동일한 "유효한 바이트 패턴"을 가지고 있으며 다른 문자로 해석한다는 것입니다. 예를 들어, ä한 인코딩은 é다른 인코딩 또는 ø세 번째 인코딩에 해당 할 수 있습니다 . 컴퓨터는 바이트를 해석하는 방법을 실제로 사람이 읽을 수있는 텍스트로 해석 할 수 없습니다 (모든 종류의 언어에 대한 사전을 추가하고 맞춤법 검사를 수행하지 않는 한). ASCII 문자 인코딩은 일부 ANSI 계열 또는 UTF-8과 같이 가장 일반적으로 사용되는 코덱의 일부와 같이 일부 문자 집합은 실제로 다른 문자의 하위 집합임을 알아야합니다. 예를 들어, 단순한 라틴 문자 만 포함하는 UTF-8로 저장된 텍스트는 ASCII로 저장된 동일한 파일과 동일합니다.


그러나 할 수없는 일과 실제로 할 수있는 일에 대한 설명으로 돌아가 봅시다.

ASCII / 비 ASCII (일반적으로 UTF-8) 텍스트 파일에 대한 기본 검사의 경우 file명령을 사용할 수 있습니다 . 많은 코덱을 알지 못하고 나머지는 새로운 문자를 포함하지 않는다고 가정하고 파일의 처음 몇 kB 만 검사합니다. 반면에, 다양한 스크립트, HTML / XML 문서 및 많은 이진 데이터 형식 (텍스트 파일을 비교하는 데 전혀 관심이 없음)과 같은 다른 일반적인 파일 형식을 인식하며 매우 긴 행이 있는지 여부에 관계없이 추가 정보를 인쇄 할 수 있습니다. 줄 바꾸기 시퀀스 유형 (예 : UNIX : LF, Windows : CR + LF)이 사용됩니다.

$ cat ascii.txt 
I am an ASCII file.
Just text and numb3rs and simple punctuation...

$ cat utf8.txt 
I am a Unicode file.
Special characters like Ω€®Ŧ¥↑ıØÞöäüß¡!

$ file ascii.txt utf8.txt 
ascii.txt: ASCII text
utf8.txt:  UTF-8 Unicode text

이것으로 충분하지 않으면 여기 에이 답변에 대해 작성한 Python 스크립트를 제공 할 수 있습니다.이 스크립트는 완전한 파일을 스캔하고 지정된 문자 세트를 사용하여 해독하려고합니다. 성공하면 해당 인코딩이 잠재적 후보입니다. 그렇지 않으면 디코딩 할 수없는 바이트가 있으면 목록에서 해당 문자 세트를 제거 할 수 있습니다.


ANSI는 실제로 문자 인코딩의 이름이 아닙니다. 아마도 ASCII 문자 인코딩으로 표현할 수있는 ANSI 이스케이프 코드를 생각하고있을 것입니다.
kasperd

@kasperd 아마도 그는 ISO 8859 또는 Window code page family 중 하나를 참조하고있을 것입니다. 북미 지역 Windows 개발자의 경우 ANSI 인코딩은 종종 역사적인 이유로 Windows 1252 인코딩을 의미합니다.
user1937198

예, ANSI는 기본적으로 ASCII (코드 0-127)와 로캘 별 코드 페이지 (코드 128-255)입니다. 당신이 맞아요 ...
바이트 사령관


12

명명 된 프로그램 file이이를 수행 할 수 있습니다. 예:

$ echo aaa >> FILE
$ file FILE
FILE: ASCII text, with CRLF, LF line terminators
$ echo öäü >> FILE
$ file FILE
FILE: UTF-8 Unicode text, with CRLF, LF line terminators

수행 방법에 관심이있는 경우를 참조하십시오 src/encoding.c.


2
어쨌든 추측 할 수 있습니다 .
hobbs

2
file추측하기도하는데 종종 좋지 않습니다. 예를 들어, 테스트에서 MacRoman과 CP-1252를 ISO-8859로 잘못 식별하여 "š"와 "ß"가 스크램블되었습니다.
Mark

대단하다! 내 오래된 .sql파일 의 올바른 인코딩을 찾기 위해 몇 시간을 보냈고 file실제로 gzip압축 파일 이라는 것을 보여주었습니다 !
Amirreza Nasiri
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.