UTF-8 텍스트 파일이 있는지 확인하는 방법자재 명세서명령줄에서?
file
명령은 다음을 표시합니다.
UTF-8 Unicode text
그러나 이것이 파일에 BOM이 없다는 의미인지는 알 수 없습니다.
우분투 12.04를 사용하고 있습니다.
답변1
file
있다면 알려줄게자재 명세서. 간단하게 테스트할 수 있습니다.
printf '\ufeff...\n' | file -
/dev/stdin: UTF-8 Unicode (with BOM) text
일부 셸(예: ash
또는 ) 에는 지원되지 않는 내장 명령이 dash
있으며 , 이 경우 GNU coreutils(예: )를 사용해야 합니다 .printf
\u
printf
/usr/bin/printf
참고: 변경 로그에 따르면 file
이 기능은 2007년부터 사용되었습니다. 따라서 이것은 현재 모든 컴퓨터에서 작동합니다.
답변2
실행하면 stat fileName
정확히 3개의 문자가 표시됩니다. 편집기에서 파일을 열면 아무것도 표시되지 않습니다. 따라서 파일 크기가 3이라는 것을 알면 파일에 BOM이 있다는 것이 분명해집니다.
또한 게시물은여기나에게 매우 도움이 되었습니다.
hexdump -n 3 -C 2.txt
00000000 ef bb bf
ef bb bf // YES
답변3
또 다른 변형 - dos2unix
:
$ dos2unix -ib *.txt
no-bom f1.txt # this file has no BOM
utf-8 f2.txt # this file has BOM + UTF-8
이 명령에는 BOM 추가 또는 제거와 같은 파일 형식을 변경하는 옵션이 있습니다.
답변4
BOM이 있는 UTF-8 파일은 3바이트 0xef 0xbb 0xbf로 시작합니다. 이는 U+FEFF 문자의 UTF-8 인코딩입니다.
파일의 처음 3바이트를 읽으면 bash에서 이러한 파일을 효율적으로 찾을 수 있습니다.
find . -type f -size +2c -print0 |
while IFS= read -rd '' file; do
IFS= LC_ALL=C read -rd '' -n3 first3 < "$file" &&
[[ $first3 = $'\xef\xbb\xbf' ]] &&
printf '%s\n' "$file"
done
파일의 나머지 부분이 유효한 UTF-8인지 확인하지 않지만 둘 다 file
단지 경험적 방법일 뿐입니다.