%EC%9C%BC%EB%A1%9C%20%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94%20%ED%8C%8C%EC%9D%BC%20%EC%B2%98%EB%A6%AC.png)
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
으로 변환하라고 지시해야 합니다 .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 프로그램은 이러한 표시를 추가하는 것을 좋아합니다. 대부분의 편집자는 이러한 표시를 제거하지 않습니다.