2009-02-03 24 views
54

Tengo una aplicación Java que lee archivos CSV que se han creado en Excel (por ejemplo, 2007). ¿Alguien sabe qué charset MS Excel usa para guardar estos archivos?¿Qué juego de caracteres usa Microsoft Excel al guardar archivos?

Me hubiera adivinado ya sea:

  • ventanas-1255 (Cp1255)
  • ISO-8859-1
  • UTF8

pero no soy capaz de decodificar caracteres extendidos (por ejemplo, letras acentuadas en francés) usando cualquiera de estos tipos de juegos de caracteres.

Respuesta

13

archivos CSV podrían estar en cualquier formato, dependiendo de qué opción de codificación se especificó durante la exportación desde Excel: (diálogo Guardar, botón Herramientas, Opciones Web de artículos, Codificación Tab)

ACTUALIZACIÓN: Excel (incluyendo Office 2013) en realidad no respeta las opciones web seleccionadas en el cuadro de diálogo "guardar como ...", por lo que este es un error de algún tipo. Solo uso OpenOffice Calc ahora para abrir mis archivos XLSX y exportarlos como archivos CSV (edite la configuración del filtro, elija la codificación UTF-8).

+4

y la codificación predeterminada es "ANSI", generalmente una de cp1250 a cp1258. –

+0

Mi codificación predeterminada es UTF-8, pero eso es probablemente porque la he seleccionado en el pasado y Excel simplemente está recordando mi selección desde la última vez que guardé un archivo CSV. Esta selección parece persistir incluso después de cerrar y volver a ejecutar Excel. – Triynko

+14

Las "Opciones web" no se aplican a las exportaciones CSV (al menos con Excel 2007). La codificación del archivo CSV parece seguir la codificación predeterminada de la instalación. Entonces puede ser cualquier cosa, en la práctica. Lamentablemente, no parece haber una forma de controlar esto en el momento de la exportación. – gawi

-3

OOXML archivos como los que vienen de Excel 2007 están codificados en UTF-8, según la wikipedia. No sé sobre los archivos CSV, pero es lógico que use el mismo formato ...

3

Tuve un problema similar la semana pasada. Recibí varios archivos CSV con distintas codificaciones. Antes de importar a la base de datos, utilicé el chardet libary para olfatear automáticamente la codificación correcta.

Chardet es un puerto del motor de detección de caracteres de Mozillas y si el tamaño de muestra es lo suficientemente grande (un carácter acentuado no funciona) funciona muy bien.

2

Russian Edition ofrece CSV, CSV (Macintosh) y CSV (DOS).

Al guardar en simple CSV, usa windows-1251.

Sólo traté de salvar palabra francesa Résumé junto con el texto ruso, que ha guardado en HEX como 52 3F 73 75 6D 3F, 3F siendo el código de ASCIIquestion mark.

Al abrir el archivo CSV, la palabra, por supuesto, se convirtió en ilegible (R?sum?)

0

CP1250 se utiliza ampliamente en documentos de Microsoft Office, incluyendo Word y Excel 2003.

http://en.wikipedia.org/wiki/Windows-1250

Una manera simple de confirmar esto sería:

  1. Crear una hoja de cálculo con una mayor ordenar personajes, p. "Veszprém" en una de las celdas;
  2. Use su lenguaje de scripting favorito para analizar y decodificar la hoja de cálculo;
  3. Mire lo que produce el script cuando imprime los datos decodificados.

Ejemplo script Perl:

#!perl 

use strict; 

use Spreadsheet::ParseExcel::Simple; 
use Encode qw(decode); 

my $file = "my_spreadsheet.xls"; 

my $xls  = Spreadsheet::ParseExcel::Simple->read($file); 
my $sheet = [ $xls->sheets ]->[0]; 

while ($sheet->has_data) { 

    my @data = $sheet->next_row; 

    for my $datum (@data) { 
     print decode('cp1250', $datum); 
    } 

} 
+4

"cp1250 se usa extensamente en documentos de Microsoft Office" ... en SU ​​parte del bosque. cp125n se utiliza ampliamente en todo el mundo, para 0 <= n <= 8. –

37

De memoria, Excel utiliza la codificación ANSI específica de la máquina. Así que este sería Windows-1252 para una instalación EN-US, 1251 para ruso, etc.

+0

Verdadero, pero Excel 2007 permite al usuario (si pueden encontrar el botón Herramientas) elegir de una lista larga; "ANSI" es el predeterminado. –

+7

Así es como debería funcionar, pero la característica está rota. En lugar de respetar la opción "guardar este documento como:" que selecciona en el cuadro de diálogo Guardar/Herramientas/elemento de opción web/pestaña de codificación, Excel solo usa el conjunto de páginas de códigos en su configuración de Región e Idioma. – Triynko

-2

Si bien es cierto que exportar un archivo de Excel que contenga caracteres especiales para csv puede ser un fastidio, sin embargo, hay un trabajo simple: simplemente copie/pegue las celdas en un google docs y luego guarde desde allí .

+5

Parece que estaban buscando una solución programática. Copiar y pegar realmente no "encaja". Además, esta pregunta es * bastante * vieja. Lo mejor es evitar resucitar hilos viejos a menos que la respuesta contribuya con algo significativo sobre las respuestas anteriores.) – Leigh

+0

Bueno, si tú lo dices. Sin embargo, la respuesta mejor calificada no funciona (ver comentarios) y tampoco es una solución programática. Además, mi solución funciona. Finalmente, el tema puede ser viejo, todavía aparece en la primera página al buscar en Google el problema, y ​​no hay una solución de trabajo en el hilo, excepto la mía. –

+0

En realidad, los comentarios dicen que es un error. También sugieren dos alternativas, obviamente no ideales: OpenOffice o la modificación de la región y la configuración del idioma. Así que no estoy seguro de cómo esta sugerencia es una mejora significativa sobre los ya dados. Ahora, si hubiera una solución en versiones posteriores, o una alternativa programática, estoy seguro de que a otros les encantaría escucharla. – Leigh

0

Se podría utilizar este código de Visual Studio VB.Net para obtener la codificación:

Dim strEncryptionType As String = String.Empty 
Dim myStreamRdr As System.IO.StreamReader = New System.IO.StreamReader(myFileName, True) 
Dim myString As String = myStreamRdr.ReadToEnd() 
strEncryptionType = myStreamRdr.CurrentEncoding.EncodingName 
2

Despertar este viejo hilo ... Ahora estamos en 2017. Y todavía Excel no puede guardar una simple hoja de cálculo en un formato CSV conservando la codificación original ... Simplemente increíble.

Afortunadamente Google Docs vive en el siglo correcto. La solución para mí es simplemente abrir la hoja de cálculo con Google Docs, luego descargarla de nuevo como CSV. El resultado es un archivo CSV codificado correctamente (con todas las cadenas codificadas en UTF8).

Cuestiones relacionadas