파일이 UTF-8인지 확인하는 Linux 명령이 있습니까?


14

Joomla .ini파일은 UTF-8로 저장해야합니다.

편집 후 파일이 UTF-8인지 확실하지 않습니다.

file파일이 실제로 UTF-8인지 아닌지를 알려주 는 Linux 명령과 같은 명령이 있습니까?


4
파일 인코딩을 말할 수 없습니다. 똑똑한 추측 만 할 수 있습니다. 당신은 대부분 옳게 추측 할 수 있지만 때로는 추측이 실패합니다. file똑똑한 추측을하는 프로그램의 예입니다.
Marco

1
@Marco : 그러나 UTF-8이 유효한지 여부를 확인할 수 있습니다. 실수로 유효한 UTF-8로 전달 될 수 있는 일부 인코딩이 있지만 ISO-8859-𝒏 또는 Windows-125𝒏 인코딩 / 문자 세트에서는 거의 발생하지 않습니다.
user1686

답변:


28

다음 명령으로 파일 인코딩을 결정할 수 있습니다.

file -bi filename

3
@nicolas MacOS의 경우 시도해 볼 수 있습니다 file -I filename(-I는 대문자 i입니다).
Rik

5
이것이 전체 파일을 읽습니까?
ctrl-alt-delor

2
@ kojow7 utf-8에는 헤더가 없습니다. 순수 ASCII (7 비트 만 해당)는 utf-8과 구별 할 수 없습니다 (즉, 헤더는 모든 종류의 문제를 유발합니다). 따라서 첫 번째 MB에 대해 ASCII 인 파일이 있고 단일 UTF-8 문자가있는 경우 전체 파일을 읽지 않으면 알 수 없습니다.
ctrl-alt-delor

3
이것은 대답으로 받아 들여서는 안됩니다. 'file'명령은 그렇게하지 않습니다. 파일의 일부만 읽고 마법의 숫자를 사용하여 최상의 추측을합니다. 때때로 '파일'은 틀린 답을 줄 수 있습니다. 파일이 ascii, iso-8859-1, utf-8 등의 인코딩을 통과하는지 확인하려면 'iconv'명령을 사용하는 것이 좋습니다.

1
나는 그것을 테스트했으며 실패 할 수 있습니다.

9

moreutils 패키지 의 isutf8명령을 사용하십시오 .

출처 : 파일이 UTF-8로 인코딩되었는지 여부를 어떻게 알 수 있습니까?



@ davidpostill 궁금합니다. 참고 문헌에 저자를 인용하는 것은 나쁜 습관입니까?
Pablo Olmos de Aguilera C.

아니요. 그러나 링크를 통해 어디로 연결되는지 알려주 는 것이 좋습니다 . 파란색 텍스트 만 읽고 있다고 가정합니다. 편집 후, 왜 그리고 언제 클릭해야하는지 알 수 있습니다. 전에는 할 수 없었습니다. (편집을 한 사람은 아니지만 94 %가 이것이
사실임을

find -type f -exec isutf8 {} +파일 이름을 인용하기 때문에 니스와 잘 작동 합니다. (그리고 사용 find ... -exec ... +도 빠릅니다)
Tomasz Gandor

2

file명령을 사용하지 마십시오 . 전체 파일을 검사하지는 않으며 기본적으로 추측합니다. 때로는 잘못된 답변을 제공합니다.

파일이 다음과 같이 UTF-8 인코딩을 전달하는지 확인할 수 있습니다.

$ iconv -f utf8 <filename> -t utf8 -o /dev/null

리턴 코드 0은 UTF8을 전달 함을 의미합니다. 0이 아닌 리턴 코드는 유효한 UTF8이 아님을 의미합니다.

이다 수없는 몇 가지 인코딩 방식이 중복으로 파일이 반드시 특정 인코딩 방식을 사용 보낸 알고. 그렇게하려면 파일에 메타 데이터가 포함되어야하고 파일을 직접 검증하는 대신 파일을 생성 한 사람을 신뢰해야합니다. 항상 직접 확인해야합니다.


0

또 다른 방법은을 사용 recode하는 것인데, UTF-8을 디코딩하려고 시도하고 유효하지 않은 문자를 발견하면 오류와 함께 종료됩니다.

if recode utf8/..UCS < "$FILE" >/dev/null 2>&1; then
    echo "Valid utf8 : $FILE"
else
    echo "NOT valid utf8: $FILE"
fi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.