J'ai reçu un fichier .csv avec la FF FE
nomenclature:
$ 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.|
Lorsque awk
j'utilise pour l'analyser, je reçois un tas d'octets nuls, ce qui, je le soupçonne, est dû à l'ordre des octets. Comment puis-je permuter l'ordre des octets sur ce fichier (en utilisant la CLI) afin que les outils normaux fonctionnent avec lui?
Notez que je pense que ce fichier n'est que des caractères ASCII (à l'exception de la nomenclature), mais je ne peux pas confirmer que comme grep
pense qu'il s'agit d'un fichier binaire:
$ grep -P '^[\x00-\x7f]' dotan.csv
Binary file dotan.csv matches
La recherche de la même chaîne dans VIM affiche chaque correspondance de caractères !
Utiliser iconv
pour convertir en ASCII ne supprime pas les valeurs \ x00, en fait cela aggrave le problème car maintenant elles ressemblent à des octets nuls au lieu d'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.|
Comment puis-je permuter l'ordre des octets sur ce fichier (en utilisant la CLI) afin que les outils normaux fonctionnent avec lui?
la source
Réponses:
De cet article wikipedia ,
FF FE
signifieUTF16LE
. Vous devriez donc direiconv
de convertir deUTF16LE
àUTF8
:la source
tail
solution fonctionne très bien. Quel OS utilisez-vous?UTF-16
au lieu d'une des versions de l'ordre des octets fonctionne.dos2unix
supprime également les nomenclatures et convertit UTF-16 en UTF-8:dos2unix
supprime également les nomenclatures UTF-8:la source
A également répondu sur StackOverflow: Comment puis-je supprimer la nomenclature d'un fichier UTF-8? @rici a une bonne réponse.
Réponse courte:
sed -i $'1s/^\uFEFF//' file.txt
mais pas sur BSD ou OS / X.vi file.txt
,:set nobomb
,:w
, simple mais manueldos2unix -r file.txt
la source