Otrzymałem plik .csv z FF FE
BOM:
$ 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.|
Podczas awk
analizowania otrzymuję wiązkę zerowych bajtów, co, jak podejrzewam, wynika z kolejności bajtów. Jak mogę zamienić kolejność bajtów w tym pliku (za pomocą CLI), aby normalne narzędzia z nim działały?
Zauważ, że myślę, że ten plik to tylko znaki ASCII (oprócz BOM), ale nie mogę tego potwierdzić, ponieważ uważam grep
, że jest to plik binarny:
$ grep -P '^[\x00-\x7f]' dotan.csv
Binary file dotan.csv matches
Wyszukiwanie tego samego ciągu w VIM pokazuje dopasowanie każdego znaku !
Użycie iconv
konwersji do ASCII nie pozbywa się wartości \ x00, w rzeczywistości pogarsza problem, ponieważ teraz wyglądają jak bajty zerowe zamiast 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.|
Jak mogę zamienić kolejność bajtów w tym pliku (za pomocą CLI), aby normalne narzędzia z nim działały?
text-processing
character-encoding
unicode
dotancohen
źródło
źródło
Odpowiedzi:
Z tego wikipedia artykule ,
FF FE
oznaczaUTF16LE
. Powinieneś więc powiedzieć,iconv
aby przekonwertować zUTF16LE
naUTF8
:źródło
tail
rozwiązanie działa dobrze. Z jakiego systemu operacyjnego korzystasz?UTF-16
zamiast jednej wersji kolejności bajtów działa.dos2unix
usuwa również LM i konwertuje UTF-16 na UTF-8:dos2unix
usuwa również LM UTF-8:źródło
Odpowiedział także na StackOverflow: Jak mogę usunąć BOM z pliku UTF-8? @rici ma dobrą odpowiedź.
Krótka odpowiedź:
sed -i $'1s/^\uFEFF//' file.txt
ale nie dotyczy BSD ani OS / X.vi file.txt
,:set nobomb
,:w
, proste, ale instrukcjados2unix -r file.txt
źródło