ruby encoding utf-8

ruby `encode '':“ / xC3 ”de ASCII-8BIT a UTF-8(Codificación:: UndefinedConversionError)



encoding (3)

Los episodios de Hannibal en tvdb tienen personajes extraños en ellos.

Por ejemplo:

Œuf

Así que Rubí escupe:

./manifesto.rb:19:in `encode'': "/xC3" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError) from ./manifesto.rb:19:in `to_json'' from ./manifesto.rb:19:in `<main>''

La línea 19 es:

puts @tree.to_json

¿Hay una manera de tratar con estos caracteres no utf? Prefiero no reemplazarlos, sino convertirlos? ¿O ignorarlos? No sé, cualquier ayuda apreciada.

La parte extraña es que el script funciona bien a través de cron. Ejecutarlo manualmente crea un error.


Acabo de pasar varias horas intentando solucionar un problema similar. Revisé mis locales, la codificación de la base de datos, todo lo que podía pensar y todavía estaba obteniendo datos codificados de ASCII-8BIT de la base de datos.

Bueno, resulta que si almacena texto en un campo binario, se devolverá automáticamente como texto codificado ASCII-8BIT, lo que tiene sentido, sin embargo, esto puede (obviamente) causar problemas en su aplicación.

Se puede arreglar cambiando la codificación de la columna a :text en sus migraciones.


File.open (yml_file, ''w'') debe cambiarse a File.open (yml_file, ''w b '')


Parece que deberías usar otra codificación para el objeto. Debe establecer la página de códigos adecuada para la variable @tree , por ejemplo, utilizando iso-8859-1 lugar de ascii-8bit utilizando @tree.force_encoding(''ISO-8859-1'') . Porque ASCII-8BIT se usa solo para archivos binarios.

Para encontrar la codificación externa actual para ruby, emita:

Encoding.default_external

Si sudo resuelve el problema, el problema estaba en la página de códigos predeterminada (codificación), por lo que para resolverlo debe establecer la página de códigos predeterminada adecuada (codificación), ya sea:

  1. En ruby ​​para cambiar la codificación a utf-8 u otra propia, haga lo siguiente:

    Encoding.default_external = Encoding::UTF_8

  2. En bash , grep actual configuración válida:

    $ sudo env|grep UTF-8 LC_ALL=ru_RU.UTF-8 LANG=ru_RU.UTF-8

    Luego .bashrc en .bashrc correctamente, de manera similar, pero no exactamente con el lenguaje ru_RU , como los siguientes:

    export LC_ALL=ru_RU.UTF-8 export LANG=ru_RU.UTF-8