FF FE
BOM 과 함께 .csv 파일을 받았습니다 .
$ 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에서 동일한 문자열을 검색하면 모든 문자 일치를 보여줍니다 !
iconv
ASCII로 변환하는 데 사용하면 \ 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 사용) 어떻게해야합니까?
답변
이 위키 백과 기사 에서 FF FE
의미 UTF16LE
합니다. 따라서 다음 iconv
으로 변환하도록 지시 해야 UTF16LE
합니다 UTF8
.
iconv -f UTF-16LE -t UTF-8 dotan.csv > fixed.txt
답변
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
답변
또한 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이라는 것을 포함하여 몇 가지 가능한 의미를 갖습니다. Wikipedia Article을 참조하십시오 .
- Windows 프로그램은 이러한 마크를 추가하는 것을 좋아합니다. 대부분의 편집자는이 마크를 제거하지 않습니다.