Pregunta ¿Cómo puedo evitar poner el comentario de codificación mágica encima de cada archivo UTF-8 en Ruby 1.9?


Tengo un proyecto de Rails con muchas cadenas cirílicas.

Funcionó bien en Ruby 1.8, pero Ruby 1.9 supone que los archivos fuente están codificados en US-ASCII a menos que proporcione un # encoding: utf-8 comentar en la parte superior del archivo fuente. En ese punto los archivos no son considerados US-ASCII.

¿Hay alguna manera más simple de decirle a Ruby que "esta aplicación está codificada en UTF8. Considere todos y todos los archivos fuente incluidos como UTF8 a menos que se indique lo contrario"?


ACTUALIZAR:

Escribí "Cómo insertar la codificación: directiva UTF-8 automáticamente en archivos Ruby 1.9"que agrega la directiva de codificación automáticamente si es necesario.


32
2017-07-20 14:29


origen


Respuestas:


Explícito es mejor que implícito. Escribir el nombre de la codificación es bueno para su editor de texto, su intérprete y cualquier otra persona que quiera ver el archivo. Diferentes plataformas tienen diferentes valores predeterminados: UTF-8, Windows-1252, Windows-1251, etc., y dificultarán la portabilidad o la integración de la plataforma si selecciona una automáticamente sobre la otra. Requerir codificaciones más explícitas es una buena cosa.

Puede ser una buena idea integrar su aplicación Rails con GetText. Entonces todas sus cadenas UTF-8 estarán aisladas en una pequeña cantidad de archivos de traducción, y sus módulos Ruby estarán limpios en ASCII.


5
2017-07-20 14:34



Creo que puedes

  1. utilizar -E utf-8 argumento de línea de comando para ruby, o
  2. establecer su RUBYOPT variable de entorno a "-E utf-8"

13
2017-07-20 15:35



En mi opinión, explícito no siempre es mejor que implícito.

Cuando casi toda la fuente que utiliza es compatible con UTF-8, puede evitar fácilmente poner el comentario de codificación mágica usando Ruby's -Ku opciones de línea de comando.

No confundas el "u"parámetro de la -K opciones con -U opciones.

-Ku : set internal and script encoding to utf-8
-U  : set internal encoding to utf-8

Luego, configure el comentario de codificación mágica solo en los scripts que lo necesiten. Recuerde, convención sobre configuración

Puede establecer la variable de entorno RUBYOPT=-Ku

Vea las opciones de línea de comandos de Ruby en http://www.manpagez.com/man/1/ruby/.


12
2018-01-20 15:09



Hay una gema que establece el comentario mágico en la parte superior de cada archivo que lo necesita en un proyecto de Rails: https://github.com/m-ryan/magic_encoding

Usted simplemente lo instala y ejecuta magic_encoding en la raíz de su proyecto, problema resuelto.


4
2018-06-17 13:41



No es una respuesta directa, pero dependiendo de su entorno de codificación puede dejar que el editor se encargue de las cosas. Emacs ruby-mode por ejemplo tiene la variable ruby-insert-encoding-magic-comment:

ruby-insert-encoding-magic-comment es   una variable definida en `ruby-mode.el '   Su valor es t

Documentación:   * Inserte un comentario mágico de 'codificación' de emacs al guardar si esto no es nada.

Puedes personalizar esta variable.

Estoy seguro de que hay algo similar para otros editores. Claro, todavía significa agregar el comentario mágico a cada archivo, pero al menos el editor lo hace automáticamente en lugar de tener que recordarlo.


3
2018-05-18 11:19



La única manera segura de garantizar que todos sus archivos (fuente y activos) se carguen con su codificación preferida en el tiempo de ejecución es utilizar el argumento de la línea de comando -E.

Todos los otros enfoques tienen inconvenientes dependiendo de su sistema (por ejemplo, imposibilidad de establecer los valores de ENV, el código de terceros cargado primero no es adecuado para su uso) Encoding.default_external, ...).

Mis servidores de producción usan el siguiente script de envoltura:

#!/bin/bash
exec /usr/local/rvm/rubies/default/bin/ruby -E utf-8:utf-8 "$@"

(asegúrese de adaptar la ruta)


1
2018-05-18 10:41



No me encuentro con tanto, pero cuando necesito asegurar UTF-8, uso el $ KCODE global. Intenta poner esto en tu entorno.rb: $KCODE = 'UTF8'

Además, ¿está seguro de que su editor está guardando archivos en UTF-8?


0
2017-07-20 14:46