Estoy desarrollando una parte de una aplicación que se encarga de exportar algunos datos a archivos CSV. La aplicación siempre usa UTF-8 debido a su naturaleza multilingüe en todos los niveles. Pero abrir tales archivos CSV (que contienen, por ejemplo, diacríticos, letras cirílicas, letras griegas) en Excel no logra los resultados esperados que muestran algo así Г„/Г¤, Г–/Г¶
. Y no sé cómo obligar a Excel a comprender que el archivo CSV abierto está codificado en UTF-8. También intenté especificar UTF-8 BOM EF BB BF
, pero Excel lo ignora.
¿Hay algún trabajo alrededor?
PD: ¿Qué herramientas pueden comportarse como Excel?
ACTUALIZAR
Tengo que decir que confundí a la comunidad con la formulación de la pregunta. Cuando hacía esta pregunta, pedí una forma de abrir un archivo CSV UTF-8 en Excel sin ningún problema para un usuario, de manera fluida y transparente. Sin embargo, utilicé una formulación incorrecta pidiendo hacerlo automáticamente . Eso es muy confuso y choca con la automatización de macros VBA. Hay dos respuestas para estas preguntas que más aprecio: la primera respuesta de Alex https://stackoverflow.com/a/6002338/166589 , y he aceptado esta respuesta; y el segundo por Mark https://stackoverflow.com/a/6488070/166589que han aparecido un poco más tarde Desde el punto de vista de la usabilidad, Excel parecía carecer de un buen soporte CSV UTF-8 fácil de usar, por lo que considero que ambas respuestas son correctas, y primero acepté la respuesta de Alex porque realmente decía que Excel no podía hacerlo que de forma transparente Eso es con lo que confundí automáticamente aquí. La respuesta de Mark promueve una forma más complicada para que los usuarios más avanzados logren el resultado esperado. Ambas respuestas son geniales, pero la de Alex se ajusta un poco mejor a mi pregunta no claramente especificada.
ACTUALIZACIÓN 2
Cinco meses después de la última edición, noté que la respuesta de Alex había desaparecido por alguna razón. Realmente espero que no haya sido un problema técnico y espero que no haya más discusión sobre qué respuesta es mejor ahora. Así que acepto la respuesta de Mark como la mejor.
\t
como delimitador. Funcionará en configuración de Excel en inglés y no en inglés. Puede presionarCtrl-S
sin seleccionar el formato de archivo, etc. Conservará los caracteres Unicode.Respuestas:
Alex tiene razón, pero como debe exportar a csv, puede dar a los usuarios este consejo al abrir los archivos csv:
De esta manera, los caracteres especiales deberían mostrarse correctamente.
fuente
El marcador de orden de bytes UTF-8 le dará una pista a Excel 2007+ sobre el hecho de que está usando UTF-8. (Ver esta publicación SO ).
En caso de que alguien tenga los mismos problemas que yo, la clase de codificación UTF8 de .NET no genera un marcador de orden de bytes en una
GetBytes()
llamada. Debe usar transmisiones (o una solución alternativa ) para obtener la lista de materiales.fuente
UTF-8
aUTF-8 with BOM
El error con la lista de materiales ignorada parece haberse solucionado para Excel 2013. Tuve el mismo problema con las letras cirílicas, pero agregar el carácter de lista de materiales
\uFEFF
ayudó.fuente
$utf8_with_bom = chr(239) . chr(187) . chr(191) . $csvText
;Es increíble que haya tantas respuestas pero ninguna responde la pregunta:
La respuesta marcada como la respuesta aceptada con más de 200 votos positivos es inútil para mí porque no quiero darles a mis usuarios un manual sobre cómo configurar Excel. Aparte de eso: este manual se aplicará a una versión de Excel, pero otras versiones de Excel tienen diferentes menús y cuadros de diálogo de configuración. Necesitaría un manual para cada versión de Excel.
Entonces, la pregunta es cómo hacer que Excel muestre datos UTF8 con un simple doble clic.
Bueno, al menos en Excel 2007, esto no es posible si utiliza archivos CSV porque se ignora la lista de materiales UTF8 y solo verá basura. Esto ya es parte de la pregunta de Lyubomyr Shaydariv:
Hago la misma experiencia: escribir datos rusos o griegos en un archivo CSV UTF8 con resultados de BOM en basura en Excel:
Contenido del archivo UTF8 CSV:
Resultado en Excel 2007:
Una solución es no usar CSV en absoluto. Microsoft implementa este formato tan estúpidamente que depende de la configuración de la región en el panel de control si se utiliza una coma o punto y coma como separador. Entonces, el mismo archivo CSV puede abrirse correctamente en una computadora pero en otra computadora no. "CSV" significa " Valores separados por comas " pero, por ejemplo, en un Windows alemán, el punto y coma por defecto debe usarse como separador mientras la coma no funciona. (Aquí debe llamarse SSV = valores separados por punto y coma) Los archivos CSV no pueden intercambiarse entre diferentes versiones de idioma de Windows. Este es un problema adicional al problema UTF-8.
Excel existe desde hace décadas. Es una pena que Microsoft no haya podido implementar algo tan básico como la importación CSV en todos estos años.
Sin embargo, si coloca los mismos valores en un archivo HTML y guarda ese archivo como archivo UTF8 con BOM con la extensión de archivo XLS , obtendrá el resultado correcto.
Contenido del archivo UTF8 XLS:
Resultado en Excel 2007:
Incluso puede usar colores en HTML que Excel mostrará correctamente.
Resultado en Excel 2007:
En este caso, solo la tabla en sí tiene un borde negro y líneas. Si desea que TODAS las celdas muestren líneas de cuadrícula, esto también es posible en HTML:
Este código incluso permite especificar el nombre de la hoja de trabajo (aquí "MySuperSheet")
Resultado en Excel 2007:
fuente
Hemos utilizado esta solución alternativa:
fuente
Tenía los mismos problemas con los archivos CSV generados por PHP. Excel ignoró la lista de materiales cuando se definió el separador
"sep=,\n"
al principio del contenido (pero, por supuesto, después de la lista de materiales).Por lo tanto, agregar una lista de materiales (
"\xEF\xBB\xBF"
) al comienzo del contenido y establecer el punto y coma como separador a travésfputcsv($fh, $data_array, ";");
del truco.fuente
He tenido el mismo problema en el pasado (cómo producir archivos que Excel puede leer y otras herramientas también pueden leer). Estaba usando TSV en lugar de CSV, pero surgió el mismo problema con las codificaciones.
No pude encontrar ninguna manera de hacer que Excel reconociera UTF-8 automáticamente, y no estaba dispuesto / no podía infligir a los consumidores de los archivos instrucciones complicadas sobre cómo abrirlos. Así que los codifiqué como UTF-16le (con una lista de materiales) en lugar de UTF-8. Dos veces el tamaño, pero Excel puede reconocer la codificación. Y se comprimen bien, por lo que el tamaño rara vez (pero lamentablemente no nunca) importa.
fuente
Antigua pregunta pero diablos, la solución más simple es:
fuente
Como publiqué en http://thinkinginsoftware.blogspot.com/2017/12/correctly-generate-csv-that-excel-can.html :
Dígale al desarrollador de software a cargo de generar el CSV que lo corrija. Como solución rápida, puede usar gsed para insertar la lista de materiales UTF-8 al comienzo de la cadena:
Este comando inserta la lista de materiales UTF-4 si no está presente. Por lo tanto, es un comando idempotente. Ahora debería poder hacer doble clic en el archivo y abrirlo en Excel.
fuente
Puede convertir el archivo .csv a UTF-8 con BOM a través de Notepad ++:
Encoding
→Convert to UTF-8
.File
→Save
.Trabajó en Microsoft Excel 2013 (15.0.5093.1000) MSO (15.0.5101.1000) de 64 bits de Microsoft Office Professional Plus 2013 en Windows 8.1 con configuración regional para programas no Unicode configurados en "Alemán (Alemania)".
fuente
Macro vba simple para abrir archivos de texto y csv utf-8
Origen: = 65001 es UTF-8. Coma: Verdadero para archivos .csv distribuidos en columnas
Guárdelo en Personal.xlsb para tenerlo siempre disponible. Personalice la barra de herramientas de Excel agregando un botón de llamada macro y abra archivos desde allí. Puede agregar más formato a la macro, como ajuste automático de columna, alineación, etc.
fuente
Solo para ayudar a los usuarios interesados en abrir el archivo en Excel que logren este hilo como yo.
He utilizado el asistente a continuación y funcionó bien para mí, importando un archivo UTF-8. No es transparente, pero es útil si ya tiene el archivo.
Fuente: https://www.itg.ias.edu/content/how-import-csv-file-uses-utf-8-character-encoding-0
fuente
Si, esto es posible. Como lo señalaron anteriormente varios usuarios, parece haber un problema con Excel al leer la marca de orden de bytes correcta cuando el archivo está codificado en UTF-8. Con UTF-16 no parece tener un problema, por lo que es endémico de UTF-8. La solución que uso para esto es agregar BOM, TWICE. Para esto ejecuto el siguiente comando sed dos veces:
, donde el comodín se puede reemplazar con cualquier nombre de archivo. Sin embargo, esto conduce a una mutación de sep = al comienzo del archivo .csv. El archivo .csv se abrirá normalmente en Excel, pero con una fila adicional con "sep =" en la primera celda. El "sep =" también se puede eliminar en la fuente .csv, pero al abrir el archivo con VBA se debe especificar el delimitador:
El formato 6 es el formato .csv. Establezca Local en verdadero, en caso de que haya fechas en el archivo. Si Local no se establece en verdadero, las fechas se americanizarán, lo que en algunos casos dañará el formato .csv.
fuente
Esta es mi solución de trabajo:
La clave es Origen: = 65001
fuente
Sí, es posible. Al escribir la secuencia que crea el csv, lo primero que debe hacer es esto:
fuente
Una lista realmente sorprendente de respuestas, pero como todavía falta una muy buena, la mencionaré aquí: abra el archivo csv con las hojas de google y guárdelo en su computadora local como un archivo de Excel.
A diferencia de Microsoft, Google ha logrado admitir archivos csv UTF-8, por lo que solo funciona para abrir el archivo allí. Y la exportación a formato Excel también funciona. Entonces, aunque esta puede no ser la solución preferida para todos, es bastante segura y la cantidad de clics no es tan alta como puede parecer, especialmente cuando ya está conectado a Google de todos modos.
fuente
Esto no aborda con precisión la pregunta, pero dado que me topé con esto y las soluciones anteriores no funcionaron para mí o tenían requisitos que no podía cumplir, aquí hay otra forma de agregar la lista de materiales cuando tiene acceso a vim:
fuente
hola estoy usando ruby on rails para la generación de csv. En nuestra aplicación, planeamos utilizar el idioma múltiple (I18n) y enfrentamos un problema al ver el contenido de I18n en el archivo CSV de Windows Excel.
Estaba bien con Linux (Ubuntu) y mac.
Identificamos que Windows Excel debe importarse nuevamente los datos para ver los datos reales. Mientras importamos obtendremos más opciones para elegir el conjunto de caracteres.
Pero esto no puede ser educado para todos y cada uno de los usuarios, por lo que la solución que buscamos es abrir con solo hacer doble clic.
A continuación, identificamos la forma de mostrar los datos de modo abierto y lista de materiales en ventanas sobresalir con la ayuda de aghuddleston GIST . Agregado en la referencia.
Ejemplo I18n contenido
En Mac y Linux
Sueco: Förnamn Inglés: Nombre
En Windows
Sueco: Förnamn Inglés: Nombre
Cosas importantes a tener en cuenta aquí es el modo abierto y bom
open_mode = "w +: UTF-16LE: UTF-8"
bom = "\ xEF \ xBB \ xBF"
Antes de escribir el CSV inserte BOM
f.write bom
f.write (csv_file)
Windows y Mac
El archivo se puede abrir directamente haciendo doble clic.
Linux (ubuntu)
Al abrir un archivo, solicite las opciones de separador -> elija "TAB"
fuente
Me enfrenté al mismo problema hace unos días, y no pude encontrar ninguna solución porque no puedo usar la
import from csv
función porque hace que todo esté diseñado como una cadena.Mi solución fue abrir primero el archivo con notpad ++ y
change the encode to ASCII
. Luego solo abrí el archivo en Excel y funcionó como se esperaba.fuente
En php, simplemente antepone $ bom a su $ csv_string:
Probado con MS Excel 2016, php 7.2.4
fuente
Esta es una pregunta antigua, pero acabo de encontrarme con un problema similar y la solución puede ayudar a otros:
Tuve el mismo problema al escribir datos de texto CSV en un archivo, luego abrir el archivo .csv resultante en Excel desplaza todo el texto en una sola columna. Después de leer las respuestas anteriores, intenté lo siguiente, que parece solucionar el problema.
Aplique una codificación de UTF-8 cuando cree su StreamWriter. Eso es.
Ejemplo:
fuente
Close()
en laDispose
pila, pero ahí vamos. También es incorrecto en su declaración sobre la importación de CSV como primitiva, ya que no necesita el enfoque HTML ineficiente que ha sugerido. De hecho, crear pasos programáticos adicionales para tomar datos de texto sin formato, transformarlos en HTML y luego extraerlos en Excel parece contrario a la intuiciónSi desea que sea completamente automático, un clic o cargar automáticamente en Excel desde una página web, pero no puede generar los archivos de Excel adecuados, le sugiero que busque el formato SYLK como alternativa. OK, no es tan simple como CSV, pero está basado en texto y es muy fácil de implementar y es compatible con UTF-8 sin problemas.
Escribí una clase PHP que recibe los datos y genera un archivo SYLK que se abrirá directamente en Excel simplemente haciendo clic en el archivo (o iniciará automáticamente Excel si escribe el archivo en una página web con el tipo MIME correcto. Incluso puede agregue formato (como negrita, números de formato de formas particulares, etc.) y cambie el tamaño de las columnas, o las columnas de tamaño automático al texto en las columnas y, en general, el código probablemente no tenga más de 100 líneas.
Es muy fácil aplicar ingeniería inversa a SYLK creando una hoja de cálculo simple y guardándola como SYLK y luego leyéndola con un editor de texto. El primer bloque son encabezados y formatos de números estándar que reconocerá (que regurgitará en cada archivo que cree), luego los datos son simplemente una coordenada X / Y y un valor.
fuente
fuente
Estoy generando archivos csv desde una aplicación simple de C # y tuve el mismo problema. Mi solución fue asegurarme de que el archivo esté escrito con codificación UTF8, así:
Originalmente tenía el siguiente código, con el cual los acentos se ven bien en Notepad ++, pero me estaban destrozando en Excel:
Su kilometraje puede variar: estoy usando .NET 4 y Excel de Office 365.
fuente
Solución de trabajo para office 365
UTF-16
(sin LE, BE)\t
Código en PHP
fuente
Primero guarde la hoja de cálculo de Excel como texto Unicode. Abra el archivo TXT con Internet Explorer y haga clic en "Guardar como" Codificación TXT: elija la codificación adecuada, es decir, para Win Cyrillic 1251
fuente
Intenté todo lo que pude encontrar en este hilo y similares, nada funcionó completamente. Sin embargo, importar a hojas de google y simplemente descargar como csv funcionó de maravilla. Pruébalo si llegas a mi punto de frustración.
fuente