2009-12-23 19 views
5

Ho scritto uno script Ruby che sta leggendo un file (File.read()) che contiene caratteri unicode e funziona correttamente dalla riga di comando.Stringhe Unicode in Ruby 1.9

Tuttavia, quando provo a inserirlo in Automator Workflow (Mac OS X), viene visualizzato questo errore;

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

Quindi quando si esegue da Automator, dividere improvvisamente non piace caratteri non ASCII. Per quanto posso dire, entrambi sono in esecuzione dalla stessa versione di Ruby (il numero di versione è lo stesso).

Non sono troppo preoccupato del perché si comportano in modo diverso (ma se qualcuno lo sa, è grandioso), ma mi piacerebbe una soluzione per rendere split accetta caratteri non ASCII.

Se è utile, ho bisogno di dividere il testo in un singolo carattere in due parti, quindi se qualcosa di simile al tokenizzatore di C funzionerebbe, posso usarlo.

risposta

7

Non si specifica la codifica del file. Poiché è impossibile determinare in modo affidabile la codifica di un file automaticamente, la codifica deve essere specificata in modo esplicito. In caso contrario, viene utilizzata la codifica esterna, se non è impostata, verrà utilizzata la codifica specificata nell'ambiente e, se l'ambiente non specifica una codifica, si presume che il file sia in 7 bit US-ASCII.

Nel tuo caso, sembra che ci sia una differenza nei due ambienti (gli script automatici vengono spesso eseguiti in un ambiente molto restrittivo senza impostazioni locali) o nel modo in cui l'interprete viene richiamato.

Quindi, avresti bisogno di fare qualcosa di simile

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

che ha funzionato, grazie! –

1

Sembra che i due vengano eseguiti da ambienti diversi, con valori LOCALE diversi.