Recibí un archivo .csv con la FF FE
lista de materiales:
$ 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.|
Cuando lo uso awk
para analizarlo, obtengo un montón de bytes nulos, lo que sospecho se debe al orden de bytes. ¿Cómo puedo cambiar el orden de bytes en este archivo (usando la CLI) para que las herramientas normales funcionen con él?
Tenga en cuenta que creo que este archivo solo tiene caracteres ASCII (excepto la lista de materiales), pero no puedo confirmarlo porque grep
piensa que es un archivo binario:
$ grep -P '^[\x00-\x7f]' dotan.csv
Binary file dotan.csv matches
¡Buscar la misma cadena en VIM muestra cada coincidencia de caracteres !
El uso iconv
de convertir a ASCII no elimina los valores \ x00, en realidad empeora el problema ya que ahora parecen bytes nulos en lugar de 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.|
¿Cómo puedo cambiar el orden de bytes en este archivo (usando la CLI) para que las herramientas normales funcionen con él?
fuente
Respuestas:
De este artículo de Wikipedia ,
FF FE
significaUTF16LE
. Entonces debes deciriconv
convertir deUTF16LE
aUTF8
:fuente
tail
solución funciona bien. ¿Qué sistema operativo usas?UTF-16
lugar de una de las versiones de orden de bytes funciona.dos2unix
también elimina las listas de materiales y convierte UTF-16 a UTF-8:dos2unix
también elimina las listas de materiales UTF-8:fuente
También respondió en StackOverflow: ¿Cómo puedo eliminar la lista de materiales de un archivo UTF-8? @rici tiene una buena respuesta.
Respuesta corta:
sed -i $'1s/^\uFEFF//' file.txt
pero no en BSD u OS / X.vi file.txt
,:set nobomb
,:w
, simple pero Manualdos2unix -r file.txt
fuente