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 Reihe von Null-Bytes, was vermutlich auf die Bytereihenfolge zurückzuführen ist. Wie kann ich die Bytereihenfolge für diese Datei (mithilfe der CLI) austauschen, damit normale Tools damit arbeiten?
Beachten Sie, dass ich denke, dass diese Datei nur aus ASCII-Zeichen besteht (mit Ausnahme der Stückliste), aber ich kann dies nicht bestätigen, da ich grep
denke, dass es sich um eine Binärdatei handelt:
$ grep -P '^[\x00-\x7f]' dotan.csv
Binary file dotan.csv matches
Wenn Sie in VIM nach derselben Zeichenfolge suchen, werden alle Zeichen angezeigt!
Durch iconv
die Konvertierung in ASCII werden \ x00-Werte nicht entfernt, sondern das Problem wird noch schlimmer, da sie jetzt wie Null-Bytes anstelle von 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 Bytereihenfolge für diese Datei (mithilfe der CLI) austauschen, damit normale Tools damit arbeiten?
quelle
Antworten:
Von diesem Wikipedia - Artikel ,
FF FE
bedeutetUTF16LE
. Sie sollten also anweiseniconv
, vonUTF16LE
zu konvertierenUTF8
:quelle
tail
Lösung funktioniert gut. Welches Betriebssystem verwenden Sie?UTF-16
anstelle einer der Versionen mit Bytereihenfolge zu arbeiten.dos2unix
entfernt auch Stücklisten und konvertiert UTF-16 in UTF-8:dos2unix
entfernt auch UTF-8-Stücklisten:quelle
Auch auf StackOverflow beantwortet: Wie kann ich die Stückliste aus einer UTF-8-Datei entfernen? @rici hat eine gute Antwort.
Kurze Antwort:
sed -i $'1s/^\uFEFF//' file.txt
, aber nicht unter BSD oder OS / X.vi file.txt
,:set nobomb
,:w
, einfache , aber Handbuchdos2unix -r file.txt
quelle