BOM(FF FE)으로 시작하는 파일 처리

BOM(FF FE)으로 시작하는 파일 처리

BOM 이 포함된 .csv 파일을 받았습니다 FF FE.

$ head -n1 dotan.csv | hd
00000000  ff fe 41 00 64 00 20 00  67 00 72 00 6f 00 75 00  |..A.d. .g.r.o.u.|

이를 구문 분석하는 데 사용하면 awk바이트 순서로 인한 것으로 의심되는 null 바이트가 많이 나타납니다. 일반 도구가 작동하도록 이 파일(CLI를 사용하여)의 바이트 순서를 바꾸려면 어떻게 해야 합니까?

이 파일은 BOM을 제외한 ASCII 문자일 뿐이라고 생각하지만 grep바이너리 파일이라고 생각하므로 확인할 수 없습니다.

$ grep -P '^[\x00-\x7f]' dotan.csv 
Binary file dotan.csv matches

VIM에서 동일한 문자열을 검색하면 다음과 같이 표시됩니다.모든 캐릭터어울리는!

ASCII로 변환하는 데 사용하면 iconv\x00 값이 제거되지 않습니다. 실제로 UTF-8 대신 null 바이트처럼 보이기 때문에 문제가 더욱 악화됩니다!

$ iconv -f UTF-8 -t ASCII dotan.csv > fixed.txt 
iconv: illegal input sequence at position 0

$ iconv -f UTF-8 -t ASCII//IGNORE dotan.csv > fixed.txt

$ head -n1 fixed.txt | hd
00000000  41 00 64 00 20 00 67 00  72 00 6f 00 75 00 70 00  |A.d. .g.r.o.u.p.|

일반 도구가 작동하도록 이 파일(CLI를 사용하여)의 바이트 순서를 바꾸려면 어떻게 해야 합니까?

답변1

이것으로부터위키피디아 기사, FF FE수단 UTF16LE. 따라서 에서 다음 iconv으로 변환하라고 지시해야 합니다 .UTF16LEUTF8

iconv -f UTF-16LE -t UTF-8 dotan.csv > fixed.txt

답변2

dos2unix또한 BOM을 제거하고 UTF-16을 UTF-8로 변환합니다.

$ printf %s あ|recode ..utf16 >a;xxd -p a;dos2unix a;xxd -p a
feff3042
dos2unix: converting file a to Unix format...
e38182

dos2unixUTF-8 BOM도 제거합니다.

$ printf %b '\xef\xbb\xbfa'>a;dos2unix a;xxd -p a
dos2unix: converting file a to Unix format...
61

답변3

StackOverflow에서도 답변되었습니다. UTF-8 파일에서 BOM을 제거하려면 어떻게 해야 합니까? @rici좋은 답변이 있습니다.

짧은 답변:

  • 짧은 대답: sed -i $'1s/^\uFEFF//' file.txt하지만 BSD나 OS/X에서는 그렇지 않습니다.
  • 또 다른 답변: vi file.txt, :set nobomb, :w, 간단하지만 수동입니다.
  • dos2unuix를 설치하십시오.dos2unix -r file.txt
  • 이러한 표시에는 파일이 UTF-8이라는 점을 포함하여 여러 가지 가능한 의미가 있습니다. 참조위키피디아 기사.
  • Windows 프로그램은 이러한 표시를 추가하는 것을 좋아합니다. 대부분의 편집자는 이러한 표시를 제거하지 않습니다.

관련 정보