Tenemos una aplicación web que exporta archivos CSV que contienen caracteres extranjeros con UTF-8, sin BOM. Tanto los usuarios de Windows como de Mac obtienen caracteres basura en Excel. Traté de convertir a UTF-8 con BOM; Excel / Win está bien con eso, Excel / Mac muestra galimatías. Estoy usando Excel 2003 / Win, Excel 2011 / Mac. Aquí están todas las codificaciones que probé:
Encoding BOM Win Mac
-------- --- ---------------------------- ------------
utf-8 -- scrambled scrambled
utf-8 BOM WORKS scrambled
utf-16 -- file not recognized file not recognized
utf-16 BOM file not recognized Chinese gibberish
utf-16LE -- file not recognized file not recognized
utf-16LE BOM characters OK, same as Win
row data all in first field
El mejor es UTF-16LE con BOM, pero el CSV no se reconoce como tal. El separador de campo es una coma, pero el punto y coma no cambia las cosas.
¿Hay alguna codificación que funcione en ambos mundos?
mb_convert_encoding($str, "UTF-16LE");
en mi código de exportación y publicaré los resultados aquí.Respuestas:
Codificaciones de Excel
Encontré que la
WINDOWS-1252
codificación es la menos frustrante cuando se trata de Excel. Dado que es básicamente un conjunto de caracteres patentado propio de Microsofts, se puede suponer que funcionará tanto en la versión Mac como en la versión Windows de MS-Excel. Ambas versiones incluyen al menos un selector correspondiente de "Origen de archivo" o "Codificación de archivo" que lee correctamente los datos.Dependiendo de su sistema y las herramientas que utiliza, esta codificación también podría ser nombrado
CP1252
,ANSI
,Windows (ANSI)
,MS-ANSI
o simplementeWindows
, entre otras variaciones.Esta codificación es un superconjunto de
ISO-8859-1
(akaLATIN1
y otros), por lo que puede recurrir aISO-8859-1
si no puede usarWINDOWS-1252
por alguna razón. Tenga en cuenta queISO-8859-1
le faltan algunos caracteresWINDOWS-1252
como se muestra aquí:Tenga en cuenta que falta el símbolo del euro . Esta tabla se puede encontrar en Alan Wood .
Conversión
La conversión se realiza de manera diferente en cada herramienta e idioma. Sin embargo, suponga que tiene un archivo
query_result.csv
que sabe que estáUTF-8
codificado. Conviértalo aWINDOWS-1252
usandoiconv
:fuente
WINDOS-1252
, que probablemente sea interpretado correctamente por Mac y Windows Excel.Para UTF-16LE con BOM si usa caracteres de tabulación como delimitadores en lugar de comas, Excel reconocerá los campos. La razón por la que funciona es que Excel en realidad termina usando su analizador Unicode * .txt.
Advertencia : si el archivo se edita en Excel y se guarda, se guardará como ASCII delimitado por tabuladores. El problema ahora es que cuando vuelve a abrir el archivo, Excel asume que es CSV real (con comas), ve que no es Unicode, por lo que lo analiza como delimitado por comas, ¡y por lo tanto lo convertirá en un hash!
Actualización : La advertencia anterior no parece estar sucediendo para mí hoy en Excel 2010 (Windows) al menos, aunque parece haber una diferencia en el comportamiento de guardado si:
comparado con:
fuente
sep=,
y la codificación UTF16LE funcionaron para mí y no requirieron un carácter separador diferente (seguía siendo una coma). Abrir el archivo haciendo doble clic cargó el archivo correctamente, con caracteres especiales y saltos de línea dentro de las celdas intactos. Desventaja: elsep=,
encabezado no es reconocido por ningún programa, excepto Excel, por lo que he visto. Pero OpenOffice / LibreOffice no requieren este truco de todos modos (los saltos de línea en el contenido de las celdas funcionan bien, mientras que cargar desde el archivo de texto / usar el asistente de texto en columnas en Excel no maneja adecuadamente los saltos de línea en las celdas).El detalle es: no hay solución. Excel 2011 / Mac no puede interpretar correctamente un archivo CSV que contenga diéresis y signos diacríticos, sin importar la codificación o el salto de aro que realice. ¡Me alegraría escuchar que alguien me diga diferente!
fuente
Solo ha intentado CSV separados por comas y puntos y coma. Si hubiera intentado CSV separado por tabulaciones (también llamado TSV), habría encontrado la respuesta:
UTF-16LE con BOM (marca de orden de bytes), separados por tabuladores
Pero : en un comentario, mencionas que TSV no es una opción para ti (aunque no he podido encontrar este requisito en tu pregunta). Eso es una lástima. A menudo significa que permite la edición manual de archivos TSV, lo que probablemente no sea una buena idea. La comprobación visual de los archivos TSV no es un problema. Además, los editores se pueden configurar para mostrar un carácter especial para marcar pestañas.
Y sí, probé esto en Windows y Mac.
fuente
Aquí está el factor decisivo sobre la importación de CSV codificado con utf8 en Excel 2011 para Mac: Microsoft dice: "Excel para Mac actualmente no es compatible con UTF-8". Excel para Mac 2011 y UTF-8
Yay, camino a seguir MS!
fuente
La mejor solución para leer archivos CSV con UTF-8 en Mac es convertirlos al formato XLSX. He encontrado un script creado por Konrad Foerstner, que he mejorado un poco al agregar soporte para diferentes caracteres delimitadores.
Descargue el script de Github https://github.com/brablc/clit/blob/master/csv2xlsx.py . Con el fin de ejecutarlo, necesitará instalar un módulo de Python openpyxl para la manipulación de archivos Excel:
sudo easy_install openpyxl
.fuente
En mi caso, esto funcionó (Mac, Excel 2011, caracteres cirílicos y latinos con diacríticos checos):
fuente
En mi caso, Excel 2011 para Mac OS no está utilizando Encoding.GetEncoding ("10000") como pensaba y desperdicié 2 días con la misma iso que en Microsoft OS. La mejor prueba de esto es crear un archivo en Excel 2011 para MAC con caracteres especiales, guardarlo como CSV y luego abrirlo en el editor de texto MAC y los caracteres se codifican.
Para mí, este enfoque funcionó, lo que significa que la exportación de CSV en Excel 2011 en MAC OS tiene caracteres especiales de Europa occidental en el interior:
fuente
UTF-8 sin BOM actualmente funciona para mí en Excel Mac 2011 14.3.2.
UTF-8 + BOM funciona, pero BOM se muestra como galimatías.
UTF-16 funciona si importa el archivo y completa el asistente, pero no si simplemente hace doble clic en él.
fuente
Lo siguiente funcionó para mí en Excel para Mac 2011 y Windows Excel 2002:
Usando iconv en Mac, convierta el archivo a UTF-16 Little-Endian + nómbrelo * .txt (la extensión .txt obliga a Excel a ejecutar el Asistente de importación de texto):
iconv -f UTF-8 -t UTF-16LE filename.csv >filename_UTF-16LE.csv.txt
Abra el archivo en Excel y en el Asistente de importación de texto elija:
PS El UTF-16LE creado por iconv tiene BOM bytes FF FE al principio.
PPS Mi archivo csv original se creó en una computadora con Windows 7, en formato UTF-8 (con los bytes BOM EF BB BF al principio) y se utilizaron saltos de línea CRLF. La coma se usó como delimitador de campo y comillas simples como calificador de texto. Contenía letras ASCII más diferentes letras latinas con tildes, diéresis, etc., además de algunas letras cirílicas. Todos se muestran correctamente en Excel para Win y Mac.
Versiones de software PPPS Exact:
* Mac OS X 10.6.8
* Excel para Mac 2011 v.14.1.3
* Windows Server 2003 SP2
* Windows Excel 2002 v.10.2701.2625
fuente
En mi Mac OS, Text Wrangler identificó un archivo CSV creado con Excel con codificación "occidental".
Después de buscar en Google, hice este pequeño script (no estoy seguro de la disponibilidad de Windows, tal vez con Cygwin ?):
$ cat /usr/local/bin/utf8.sh
fuente
En mi caso, agregar Preamble al archivo resolvió mi problema:
fuente
en lugar de csv, intente generar html con una extensión XLS y tipo mime "application / excel". Sé que esto funcionará en Windows, pero no puedo hablar por MacOS
fuente
br
etiqueta), Excel para Mac ignora el CSS (funciona con Windows)mso-data-placement:same-cell;
Esto funciona para mi
Ahora el punto clave, elija MacIntosh como File Origin (debería ser la primera opción).
Esto está utilizando Excel 2011 (versión 14.4.2)
* Hay un pequeño menú desplegable en la parte inferior de la ventana
fuente
Resuelva esto usando java (UTF-16LE con BOM):
Tenga en cuenta que el archivo CSV debe usar
TAB
como separador. Puede leer el archivo CSV tanto en Windows como en MAC OS X.Consulte: ¿Cómo codifico / decodifico conjuntos de bytes UTF-16LE con una lista de materiales?
fuente