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
변환하도록 지시해야 합니다 .UTF16LE
UTF8
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
dos2unix
UTF-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 프로그램은 이러한 태그를 추가하는 것을 좋아합니다. 대부분의 편집자는 이러한 태그를 제거하지 않습니다.