2010-07-20 13 views
32

Tengo un proyecto de Rails con muchas cadenas cirílicas.¿Cómo puedo evitar poner el comentario de codificación mágica encima de cada archivo UTF-8 en Ruby 1.9?

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 comentario # encoding: utf-8 en la parte superior del archivo fuente. En ese punto, los archivos no se consideran US-ASCII.

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


ACTUALIZACIÓN:

me escribió "How to insert the encoding: UTF-8 directive automatically in Ruby 1.9 files" que añade la directiva de codificación automáticamente si es necesario.

+2

James Gray escribió [una serie de artículos] (http://blog.grayproductions.net/articles/the_unicode_character_set_and_encodings) sobre Unicode y Ruby. El manejo de los archivos fuente era parte de esa serie. Es una buena lectura. –

+0

5 años después: actualice a ruby ​​2.0+ donde el valor predeterminado es UTF-8 (https://www.ruby-lang.org/en/news/2013/02/24/ruby-2-0-0-p0- is-released /) –

Respuesta

5

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.

+0

+1 La división de las cadenas que no son ASCII en un archivo separado es una gran manera de manejar el problema. O bien, colóquelos en una tabla en un archivo DB o YAML, lo que facilita el ajuste del idioma sin tener que tocar el código fuente. –

+2

Exigir codificación explícita es bueno. Sin embargo, Ruby está eligiendo implícitamente ASCII-8BIT para todos los archivos. Debería ser posible establecer explícitamente un valor por defecto diferente. Para las aplicaciones que usan cadenas completamente UTF-8, por ejemplo, no tiene sentido tener que incluir un comentario mágico en cada archivo, ¿sí? – jpgeek

0

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

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

+0

KCODE no afecta el análisis fuente, afaik. –

13

Creo que se puede o bien

  1. uso -E utf-8 línea de comandos argumento para ruby, o
  2. configura la variable RUBYOPT entorno para "-E utf-8"
+0

El uso sugerido solo establece la codificación externa. Para configurar tanto la codificación externa como la interna, use '-E utf-8: utf-8'. –

1

La única prueba de tontos (y seco!) 1,9 camino asegurarse de que todos sus archivos (fuente y activos) se carguen con su codificación preferida en tiempo de ejecución es usar 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 tercero cargado primero no es adecuado para usar Encoding.default_external, ...).

Mis servidores de producción utilizan la siguiente guión envoltorio:

#!/bin/bash 
exec /usr/local/rvm/rubies/default/bin/ruby -E utf-8:utf-8 "[email protected]" 

(asegúrese de adaptar la ruta)

3
No

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

rubí-insert-codificación-magia-comentario es una variable definida en `rubí-mode.el ' Su valor es t

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

Puede 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.

4

Hay una joya que establece el comentario de magia en la parte superior de todos los archivos que necesita en un proyecto Rails: https://github.com/m-ryan/magic_encoding

Usted sólo tiene que instalar y ejecutar magic_encoding en la raíz de su proyecto, problema resuelto.

+0

Súper simple y extremadamente rápido. – lightyrs

12

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 las opciones de línea de comandos de Ruby -Ku.

No confunda el parámetro "u" de las opciones -K con las opciones -U.

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

A continuación, establezca 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

opciones de línea de comandos de Sede de rubí a http://www.manpagez.com/man/1/ruby/.

+0

Las opciones de la línea de comandos de Ruby están disponibles en la línea de comandos al escribir 'man ruby' o' info ruby' en * nix y Mac OS. –

+0

para Rails, agregue el parámetro '-Ku' en el archivo' script/rails' –

Cuestiones relacionadas