2011-10-07 13 views
7

Tengo un archivo que se describe en Unix como:iconv formato Unicode entrada desconocida

$file xxx.csv 
xxx.csv: UTF-8 Unicode text, with very long lines 

se visualiza en less/vi hará que algunos caracteres especiales (SSA ° ...) ilegible (├╝); Windows tampoco lo mostrará; importarlo directamente a un db simplemente cambiará los caracteres especiales a algunos otros caracteres especiales (+ ä, + ñ, ...).

que querían convertir ahora a una codificación "default legible" con iconv. Cuando trato de convertirlo con iconv

$iconv -f UTF-8 -t ISO-8859-1 xxx.csv > yyy.csv 
iconv: illegal input sequence at position 1234 

uso de Unicode como entrada y UTF-8 como salida volverá el mismo mensaje

estoy adivinando el archivo es algo codificado en otro formato que no lo hago sé - ¿cómo puedo saber qué formato con el fin de convertirlo en algo "universal" legible ...

+0

intente abrirlo en un editor de texto que le permite cambiar la codificación con el que abrir el archivo. En el peor de los casos, un navegador también lo hará. Luego juegue con las codificaciones disponibles y vea qué muestra los caracteres correctamente. – deceze

+0

Probé con la libreta ++ pero es 680MB y Notepad ++ me dice que es demasiado grande .. –

+0

El archivo no es, obviamente, UTF-8, aunque 'file' adivinado. ¿Puede mostrarnos los ocho bytes comenzando en el desplazamiento 1234, en su forma hexdump? –

Respuesta

4

el problema era que Windows no puede interpretar el archivo como UTF-8 sobre sí mismo. se lee como ascos y luego una se convierte en una interpretación ä 2 caracteres (ASCII 195 164)

tratando de convertirlo, he encontrado una solución que funciona para mí:

iconv -f UTF-8 -t WINDOWS-1252//TRANSLIT --output=outfile.csv inputfile.csv 

ahora puedo ver el caracteres especiales correctamente en editores

para compability SQL Server, la conversión de UTF-8 a UTF-16 funcionará aún mejor ... simplemente el tamaño del archivo crece un poco

1

Si no está seguro sobre el tipo de archivo que se trata con entonces puedes encontrarlo de la siguiente manera,

file file_name 

El comando anterior le dará el formato de archivo. Entonces iconv se puede utilizar en consecuencia. Por ejemplo, si el formato de archivo es UTF-16 y desea convertirlo a , puede usar UTF-8 y luego.

iconv -f UTF-16 -t UTF-8 file_name >output_file_name 

Espero que esto le brinde una visión adicional de lo que está buscando.

8

la conversión de UTF-8 a ISO-8859-1 sólo funciona si el texto UTF-8 sólo tiene caracteres que se pueden representar en la norma ISO-8859-1. Si este no es el caso, debe especificar lo que debe suceder con estos caracteres, ignorando (// IGNORE) o aproximándolos (// TRANSLIT). Pruebe uno de estos dos:

iconv -f UTF-8 -t ISO-8859-1//IGNORE --output=outfile.csv inputfile.csv 
iconv -f UTF-8 -t ISO-8859-1//TRANSLIT --output=outfile.csv inputfile.csv 

En la mayoría de los casos, supongo aproximación es la mejor solución, por ejemplo, la cartografía caracteres acentuados a sus contrapartes no acentuadas, el símbolo del euro a euros, etc ...

Cuestiones relacionadas