..png)
Ich habe eine CSV-Datei mit der FF FE
Stückliste erhalten:
$ 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.|
Beim awk
Parsen erhalte ich eine Menge Nullbytes, was vermutlich an der Bytereihenfolge liegt. Wie kann ich die Bytereihenfolge dieser Datei ändern (mithilfe der CLI), damit normale Tools damit funktionieren?
Beachten Sie, dass ich glaube, dass diese Datei nur aus ASCII-Zeichen besteht (mit Ausnahme der Stückliste), dies jedoch nicht bestätigen kann, da ich grep
glaube, dass es sich um eine Binärdatei handelt:
$ grep -P '^[\x00-\x7f]' dotan.csv
Binary file dotan.csv matches
Die Suche nach der gleichen Zeichenfolge in VIM zeigtjeder Charakterpassend dazu!
Durch iconv
die Konvertierung in ASCII werden die \x00-Werte nicht gelöscht. Tatsächlich wird das Problem dadurch noch schlimmer, da sie nun wie Nullbytes und nicht wie UTF-8 aussehen!
$ 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.|
Wie kann ich die Byte-Reihenfolge dieser Datei (mithilfe der CLI) ändern, sodass normale Tools damit funktionieren?
Antwort1
DavonWikipedia-Artikel, FF FE
bedeutet UTF16LE
. Sie sollten also angeben, von in iconv
umzuwandeln :UTF16LE
UTF8
iconv -f UTF-16LE -t UTF-8 dotan.csv > fixed.txt
Antwort2
dos2unix
entfernt auch BOMs und konvertiert UTF-16 in 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
entfernt auch UTF-8-BOMs:
$ printf %b '\xef\xbb\xbfa'>a;dos2unix a;xxd -p a
dos2unix: converting file a to Unix format...
61
Antwort3
Auch auf StackOverflow beantwortet: Wie kann ich die BOM aus einer UTF-8-Datei entfernen? @ricihat eine gute Antwort.
Kurze Antwort:
- Kurze Antwort:
sed -i $'1s/^\uFEFF//' file.txt
, aber nicht auf BSD oder OS/X. - Eine andere Antwort:
vi file.txt
,:set nobomb
,:w
, einfach, aber manuell - Installieren Sie dos2unuix;
dos2unix -r file.txt
- Diese Markierungen können mehrere Bedeutungen haben, einschließlich der einfachen Angabe, dass die Datei UTF-8 ist; sieheWikipedia-Artikel.
- Windows-Programme fügen diese Markierungen gerne hinzu. Die meisten Editoren entfernen diese Markierungen nicht.