2009-12-23 9 views
5

He escrito un script de Ruby que está leyendo un archivo (File.read()) que contiene caracteres Unicode, y funciona bien desde la línea de comandos.Cadenas Unicode en Ruby 1.9

Sin embargo, cuando trato de ponerlo en un Automator Workflow (Mac OS X), aparece este error;

2009-12-23 17:55:15 -0500: /Users/jeffreyaylesworth/bin/symbols:19:in `split': invalid byte sequence in US-ASCII (ArgumentError) 
(traceback) 

Así que cuando se ejecuta desde Automator, split repentinamente no le gustan los caracteres no ASCII. Por lo que puedo decir, ambos se ejecutan desde la misma versión de Ruby (el número de versión es el mismo).

No estoy demasiado preocupado acerca de por qué están actuando de manera diferente (pero si alguien lo sabe, eso es genial), pero me gustaría una solución para hacer que los caracteres no ASCII se acepten divididos.

Si sirve de ayuda, necesito dividir el texto en un solo carácter en dos partes, por lo que si funciona algo similar al tokenizador de C, puedo usarlo.

Respuesta

7

No especifica la codificación del archivo. Dado que es imposible determinar de manera confiable la codificación de un archivo automáticamente, la codificación debe especificarse explícitamente. Si no es así, se utiliza la codificación externa, si no se establece, se utilizará la codificación especificada en el entorno, y si el entorno no especifica una codificación, se supone que el archivo está en 7 poco US-ASCII.

En su caso, parece que hay una diferencia en los dos entornos (los scripts automatizados a menudo se ejecutan en un entorno muy restrictivo sin ajustes de configuración regional) o en la forma en que se invoca al intérprete.

Por lo tanto, lo que se necesita para hacer algo como

File.read('/path/to/file', encoding: 'UTF-8') 
+0

que funcionaba, gracias! –

1

Parece que los dos se ejecutan desde diferentes entornos, con diferentes valores LOCALE.

Cuestiones relacionadas