¿Es posible forzar a Excel a reconocer archivos CSV UTF-8 automáticamente?


Estoy desarrollando una parte de una aplicación que se encarga de exportar algunos datos a archivos CSV. La aplicación siempre utiliza UTF-8 debido a su naturaleza multilingüe en todos los niveles. Pero abrir estos archivos CSV (que contienen, por ejemplo, diacríticos, letras cirílicas, letras griegas) en Excel no logra los resultados esperados que muestran algo como Г„/Г¤, Г–/Г¶. Y no se cómo forzar a Excel a entender que el archivo CSV abierto está codificado en UTF-8. También intenté especificar UTF-8 BOM EF BB BF, pero Excel ignora eso.

¿Hay alguna solución alternativa?

P.d. ¿Qué herramientas pueden comportarse potencialmente como lo hace Excel?


ACTUALIZAR

Tengo que decir que he confundido a la comunidad con la formulación de la pregunta. Cuando estaba haciendo esta pregunta, pedí una forma de abrir un archivo CSV UTF-8 en Excel sin ningún problema para un usuario, de una manera fluida y transparente. Sin embargo, usé una formulación incorrecta pidiendo hacerlo automáticamente. Eso es muy confuso y choca con la automatización de macros de 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 la segunda de Mark https://stackoverflow.com/a/6488070/166589 que han aparecido un poco más tarde. Desde el punto de vista de la usabilidad, Excel parecía carecer de un buen soporte de CSV UTF-8 fácil de usar, por lo que considero ambas respuestas son correctos, y he aceptado la respuesta de Alex primero porque realmente declaró que Excel no fue capaz de hacerlo de manera transparente. Eso es lo que confundí con 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, he notado que la respuesta de Alex tiene desapareció por alguna razón. Realmente espero que no fuera un problema técnico y espero que no haya más discusión sobre qué respuesta es mayor ahora. Así que estoy aceptando la respuesta de Mark como la mejor.

Author: Community, 2011-05-14

24 answers

Alex es correcto, pero como tienes que exportar a csv, puedes dar a los usuarios este consejo al abrir los archivos csv:

  1. Guarde el archivo exportado como csv
  2. Abrir Excel
  3. Importa los datos usando Datos Data > Importar Datos externos {>Importar datos
  4. Seleccione el tipo de archivo de "csv" y busque su archivo
  5. En el asistente de importación, cambie el File_Origin a "65001 UTF" (o elija el identificador de caracteres de idioma correcto)
  6. Cambie el delimitador a coma
  7. Seleccione dónde importar y Terminar

De esta manera los caracteres especiales deben mostrarse correctamente.

 327
Author: Mark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-27 13:38:04

El marcador de orden de bytes UTF-8 indicará a Excel 2007+ el hecho de que está utilizando UTF-8. (Ver esto es post).

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 incluso cuando se le dice explícitamente a su constructor. Tienes que usar esta solución alternativa si quieres realmente guardarla con un marcador de orden de bytes.

 116
Author: StriplingWarrior,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:31:37

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 BOM \uFEFF ayudó.

 58
Author: sshturma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-26 07:52:21

Es increíble que haya tantas respuestas pero ninguna responde a la pregunta:

" Cuando estaba haciendo esta pregunta, pedí una forma de abrir un UTF-8 Archivo CSV en Excel sin ningún problema para un usuario,..."

La respuesta marcada como la respuesta aceptada con más de 200 votos es inútil para mí porque no quiero dar a mis usuarios un manual de 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 diálogos de configuración. Necesitará 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 usa archivos CSV porque la lista de materiales UTF8 se ignora y solo verá basura. Esto ya es parte de la cuestión de Lyubomyr Shaydariv:

" También intenté especificar UTF - 8 BOM EF BB BF, pero Excel ignora que."

Hago la misma experiencia: Escribir datos rusos o griegos en un archivo CSV UTF8 con BOM resulta en basura en Excel:

Contenido del archivo CSV UTF8:

Colum1;Column2
Val1;Val2
Авиабилет;Tλληνικ

Resultado en Excel 2007:

CSV UTF8 Excel

Una solución es no usar CSV en absoluto. Este formato es implementado tan estúpidamente por Microsoft que depende de la configuración de región en panel de control si coma o punto y coma se usa como separador. Tan el mismo archivo CSV puede abrirse correctamente en una computadora, pero en otra computadora no. "CSV" significa " Coma Valores separados" pero, por ejemplo, en una ventana alemana, por defecto, el punto y coma debe usarse como separador mientras que la coma no funciona. (Aquí debe llamarse SSV = Valores separados por punto y coma) Los archivos CSV no se pueden intercambiar entre versiones de diferentes idiomas de Windows. Este es un problema adicional al problema UTF-8.

Excel existe desde hace décadas. Es una pena que Microsoft no fue capaz de implementar una cosa tan básica como la importación CSV en todos estos años.

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:

<table>
<tr><td>Colum1</td><td>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td>Авиабилет</td><td>Tλληνικ</td></tr>
</table>

Resultado en Excel 2007:

UTF8 HTML Excel

Incluso puede usar colores en HTML que Excel mostrará correctamente.

<style>
.Head { background-color:gray; color:white; }
.Red  { color:red; }
</style>
<table border=1>
<tr><td class=Head>Colum1</td><td class=Head>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td class=Red>Авиабилет</td><td class=Red>Tλληνικ</td></tr>
</table>

Resultado en Excel 2007:

UTF8 HTML Excel

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:

<html xmlns:x="urn:schemas-microsoft-com:office:excel">
    <head>
        <meta http-equiv="content-type" content="text/plain; charset=UTF-8"/>
        <xml>
            <x:ExcelWorkbook>
                <x:ExcelWorksheets>
                    <x:ExcelWorksheet>
                        <x:Name>MySuperSheet</x:Name>
                        <x:WorksheetOptions>
                            <x:DisplayGridlines/>
                        </x:WorksheetOptions>
                    </x:ExcelWorksheet>
                </x:ExcelWorksheets>
            </x:ExcelWorkbook>
        </xml>
    </head>
    <body>
        <table>
            <tr><td>Colum1</td><td>Column2</td></tr>
            <tr><td>Val1</td><td>Val2</td></tr>
            <tr><td>Авиабилет</td><td>Tλληνικ</td></tr>
        </table>
    </body>
</html>

Este código incluso permite especificar el nombre de la hoja de trabajo (aquí "MySuperSheet")

Resultado en Excel 2007:

introduzca la descripción de la imagen aquí

 31
Author: Elmue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-17 22:01:56

Hemos utilizado esta solución:

  1. Convertir CSV a UTF-16
  2. Insertar la lista de materiales al principio del archivo
  3. Usar tab como separador de campos
 29
Author: e-zinc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-29 19:17:48

Tuvo los mismos problemas con los archivos CSV generados por PHP. Excel ignoró la lista de materiales cuando el Separador se definió a través de "sep=,\n" al principio del contenido (pero por supuesto después de la lista de materiales).

Así que agregar una lista de materiales ("\xEF\xBB\xBF") al principio del contenido y establecer el punto y coma como separador a través de fputcsv($fh, $data_array, ";"); hace el truco.

 17
Author: Ixtlilton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-26 09:18:01

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 que Excel reconociera UTF-8 automáticamente, y no estaba dispuesto/capaz de infligir a los consumidores de los archivos instrucciones complicadas de 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.

 9
Author: Steve Jessop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-09 09:18:26

Vieja pregunta pero diablos, la solución más simple es:

  1. Abrir CSV en el bloc de notas
  2. Guardar como - > seleccionar la codificación correcta
  3. Abra el nuevo archivo
 9
Author: Aki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-29 13:39:49

Como publiqué en http://thinkinginsoftware.blogspot.com/2017/12/correctly-generate-csv-that-excel-can.html:

Dile al desarrollador de software encargado de generar el CSV que lo corrija. Como solución rápida, puede usar gsed para insertar la lista de materiales UTF-8 al principio de la cadena:

gsed -i '1s/^\(\xef\xbb\xbf\)\?/\xef\xbb\xbf/' file.csv

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.

 4
Author: Nestor Urquiza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-08 17:40:49

Esta es una pregunta antigua, pero aparece en la búsqueda en la parte superior. Descubrí después de muchos esfuerzos que agregar caracteres de lista de materiales al principio del archivo csv ayuda.

He informado aquí: https://sites.google.com/site/ritechtips/home/the-multi-line-fields-csv-file-and-excel-import---ha

 3
Author: Found-it-finally,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-29 19:18:01

Macro vba simple para abrir archivos de texto y csv utf-8

Sub OpenTextFile()

   filetoopen = Application.GetOpenFilename("Text Files (*.txt;*.csv), *.txt;*.csv")
   If filetoopen = Null Or filetoopen = Empty Then Exit Sub

   Workbooks.OpenText Filename:=filetoopen, _
   Origin:=65001, DataType:=xlDelimited, Comma:=True

End Sub

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 formateo a la macro, como autoajuste de columna, alineación, etc.

 2
Author: alc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-19 15:02:40

Solo para ayudar a los usuarios interesados en abrir el archivo en Excel que logran este hilo como yo.

He utilizado el asistente de abajo y funcionó bien para mí, importando un archivo UTF-8. No transparente, pero útil si ya tiene el archivo.

  1. Abra Microsoft Excel 2007.
  2. Haga clic en la opción de la barra de menú de datos.
  3. Haga clic en el icono de texto de.
  4. Vaya a la ubicación del archivo que desea importar. Haga clic en el nombre del archivo y luego haga clic en Botón Importar. El Asistente de Importación de texto - Paso 1 o 3 ventana aparecerá ahora en la pantalla.
  5. Elija el tipo de archivo que mejor describa su Ancho Delimitado por datos o Fijo.
  6. Elija 65001: Unicode (UTF-8) en la lista desplegable que aparece junto al origen del archivo.
  7. Haga clic en el botón Siguiente para mostrar el Asistente de importación de texto - Paso 2 o 3 ventana.
  8. Coloque una marca de verificación junto al delimitador que se utilizó en el archivo que desea importar a Microsoft Excel 2007. El La ventana de vista previa de datos le mostrará cómo aparecerán sus datos en función del delimitador que haya elegido.
  9. Haga clic en el botón Siguiente para mostrar el Asistente de importación de texto - Paso 3 de 3.
  10. Elija el formato de datos apropiado para cada columna de datos que desea importar. También tiene la opción de no importar una o más columnas de datos si lo desea.
  11. Haga clic en el botón Finalizar para finalizar la importación de sus datos en Microsoft Excel 2007.

Fuente: https://www.itg.ias.edu/content/how-import-csv-file-uses-utf-8-character-encoding-0

 2
Author: Wagner Bertolini Junior,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-13 14:38:25

Una lista realmente increíble de respuestas, pero como todavía falta una bastante buena, la mencionaré aquí: abra el archivo csv con google sheets y guárdelo en su computadora local como un archivo de excel.

A diferencia de Microsoft, Google ha logrado soportar archivos csv UTF-8, por lo que solo funciona para abrir el archivo allí. Y el formato de exportación a Excel también funciona. Así que a pesar de que esta puede no ser la solución preferida para todos, es bastante a prueba de fallos y el número de clics no es tan alto como puede sonar, especialmente cuando ya estás conectado a Google de todos modos.

 2
Author: Christoph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-08 19:26:20

Esta es mi solución de trabajo:

vbFILEOPEN = "your_utf8_file.csv"
Workbooks.OpenText Filename:=vbFILEOPEN, DataType:=xlDelimited, Semicolon:=True, Local:=True, Origin:=65001

La clave es Origin: = 65001

 1
Author: Nobilis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-18 09:49:47

Sí es posible. Al escribir el stream creando el csv, lo primero que hay que hacer es esto:

myStream.Write(Encoding.UTF8.GetPreamble(), 0, Encoding.UTF8.GetPreamble().Length)
 1
Author: zax,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-28 21:18:08

Sí, esto es posible. Como se señaló anteriormente por varios usuarios, parece haber un problema con excel leyendo 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 la lista de materiales, DOS VECES. Para ello ejecutaré el siguiente comando sed dos veces:

sed -I '1s/^/\xef\xbb\xbf/' *.csv

, donde el comodín puede ser reemplazado con cualquier nombre de archivo. Sin embargo, esto conduce a una mutación del sep= al principio de la .archivo csv. El .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 en sí, pero al abrir el archivo con VBA se debe especificar el delimitador:

Workbooks.Open(name, Format:=6, Delimiter:=";", Local:=True)

El formato 6 es el .formato csv. Establezca Local en true, en caso de que haya fechas en el archivo. Si el Local no está establecido en true, las fechas serán Americanizada, que en algunos casos los corruptos .formato csv.

 1
Author: TheCharlatan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-05 10:08:40

Esto no está abordando con precisión la pregunta, pero ya 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 manera de agregar la lista de materiales cuando tiene acceso a vim:

vim -e -s +"set bomb|set encoding=utf-8|wq" filename.csv
 1
Author: CannedMoose,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-01 17:10:03

Es 2018, y vine del Futuro.

Para abrir el archivo con solo doble clic que muestra los caracteres correctos, abra el archivo en notepad++ y seleccione Encoding- > UTF-8-BOM y pulse save.

 1
Author: Christopher Adi Pascual,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-20 08:15:40

Esta es una vieja pregunta pero acabo de encontrarme con un problema similar y la solución puede ayudar a otros:

Tuvo el mismo problema cuando escribía datos de texto CSV en un archivo, luego abría el resultado.csv en Excel desplaza todo el texto en una sola columna. Después de leer las respuestas anteriores, probé lo siguiente, lo que parece resolver el problema.

Aplica una codificación UTF-8 al crear tu StreamWriter. Eso es.

Ejemplo:

using (StreamWriter output = new StreamWriter(outputFileName, false, Encoding.UTF8, 2 << 22)) {
   /* ... do stuff .... */
   output.Close();
}
 0
Author: Rex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-25 13:41:02

Si desea que sea completamente automático, con un clic, o cargar automáticamente en Excel desde una página web, por ejemplo, pero no puede generar archivos de Excel adecuados, entonces le sugeriría mirar el formato SYLK como una 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 con solo hacer clic en el archivo (o se iniciará automáticamente Excel si escribe el archivo en una página web con el tipo mime correcto. Incluso puede agregar formato (como negrita, formatear números de formas particulares, etc.) y cambiar el tamaño de las columnas, o el tamaño automático de las columnas al texto en las columnas y, en general, el código probablemente no sea más de 100 líneas.

Es muy fácil aplicar ingeniería inversa a SYLK creando una simple hoja de cálculo y guardándola como SYLK y luego leiéndola con un editor de texto. El primer bloque son encabezados y formatos de números estándar que reconocerá (que solo regurgita en cada archivo que cree), entonces los datos son simplemente una coordenada X/Y y un valor.

 0
Author: Cloudranger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-10 10:16:02
  1. Descargar e instalar LibreOffice Calc
  2. Abra el archivo csv de su elección en LibreOffice Calc
  3. Gracias al cielo que aparece un asistente de importación de texto...
  4. ...seleccione sus opciones de delimitador y codificación de caracteres
  5. Seleccione los datos resultantes en Calc y copie y pegue en Excel
 0
Author: Dan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-06 02:40:36

Estoy generando archivos csv desde una simple aplicación de C# y tuve el mismo problema. Mi solución fue asegurarme de que el archivo está escrito con codificación UTF8, así:

// Use UTF8 encoding so that Excel is ok with accents and such.
using (StreamWriter writer = new StreamWriter(path, false, Encoding.UTF8))
{
    SaveCSV(writer);
}

Originalmente tenía el siguiente código, con el que los acentos se ven bien en Notepad++ pero se estaban alterando en Excel:

using (StreamWriter writer = new StreamWriter(path))
{
    SaveCSV(writer);
}

Su kilometraje puede variar - estoy usando.NET 4 y Excel de Office 365.

 0
Author: yoyo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-14 21:21:00

Hola estoy usando ruby on rails para la generación de csv. En nuestra aplicación planeamos ir por el multi idioma (I18n) y nos enfrentamos a 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 necesita importar los datos nuevamente para ver los datos reales. Mientras importamos obtendremos más opciones para elegir el conjunto de caracteres.

Pero esto no se puede educar para todos y cada uno de los usuarios, por lo que lo que busca es abrir con solo hacer doble clic.

Luego identificamos la forma de mostrar los datos por modo abierto y bom en windows excel con la ayuda de aghuddleston gist. Añadido en referencia.

Ejemplo I18n content

En Mac y Linux

Sueco: Förnamn Inglés: First name

En Windows

Sueco : Förnamn Inglés: First name

def user_information_report(report_file_path, user_id)
    user = User.find(user_id)
    I18n.locale = user.current_lang
    open_mode = "w+:UTF-16LE:UTF-8"
    bom = "\xEF\xBB\xBF"
    body user, open_mode, bom
  end

def headers
    headers = [
        "ID", "SDN ID",
        I18n.t('sys_first_name'), I18n.t('sys_last_name'), I18n.t('sys_dob'),
        I18n.t('sys_gender'), I18n.t('sys_email'), I18n.t('sys_address'),
        I18n.t('sys_city'), I18n.t('sys_state'), I18n.t('sys_zip'),
        I18n.t('sys_phone_number')
    ]
  end

def body tenant, open_mode, bom
    File.open(report_file_path, open_mode) do |f|
      csv_file = CSV.generate(col_sep: "\t") do |csv|
        csv << headers
        tenant.patients.find_each(batch_size: 10) do |patient|
          csv <<  [
              patient.id, patient.patientid,
              patient.first_name, patient.last_name, "#{patient.dob}",
              "#{translate_gender(patient.gender)}", patient.email, "#{patient.address_1.to_s} #{patient.address_2.to_s}",
              "#{patient.city}", "#{patient.state}",  "#{patient.zip}",
              "#{patient.phone_number}"
          ]
        end
      end
      f.write bom
      f.write(csv_file)
    end
  end

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. escribir bom

F. write (csv_file)

Windows y Mac

El archivo se puede abrir directamente haciendo doble clic.

Linux (ubuntu)

Al abrir un archivo, pregunte por las opciones del separador - > elija la pestaña"" introduzca la descripción de la imagen aquí

 0
Author: praaveen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-15 12:27:24

Primero guarde la hoja de cálculo de Excel como texto Unicode. Abra el archivo TXT usando Internet explorer y haga clic en" Guardar como " Codificación TXT-elija la codificación adecuada, es decir, para Win Cyrillic 1251

 -1
Author: Bragabondio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-06 20:59:19