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를 사용하여 이 파일의 바이트 순서를 어떻게 바꿀 수 있습니까?

파일이 ASCII 문자로만 된 것 같지만(BOM 제외) grep바이너리 파일인 것 같아서 확인할 수 없습니다.

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

VIM에서 동일한 문자열 표시 검색모든 역할성냥!

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

$ 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 프로그램은 이러한 태그를 추가하는 것을 좋아합니다. 대부분의 편집자는 이러한 태그를 제거하지 않습니다.

관련 정보