Unicode stringhe in Ruby 1.9
-
21-09-2019 - |
Domanda
Ho scritto uno script di Ruby che sta leggendo un file (File.read()
) che contiene caratteri Unicode, e funziona bene dalla riga di comando.
Tuttavia, quando provo a metterlo in un flusso di lavoro Automator (Mac OS X), ottengo 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, durante l'esecuzione da Automator, divisi improvvisamente non ama i caratteri non ASCII. Per quanto posso dire, entrambi sono in esecuzione della stessa versione di Ruby (il numero di versione è lo stesso).
Io non sono troppo preoccupato per questo che agiscono diversi (ma se qualcuno lo sa, che è grande), ma vorrei una soluzione per rendere spaccatura accettare i caratteri non ASCII.
Se aiuta, ho bisogno di dividere il testo in un singolo carattere in due pezzi, quindi se qualcosa che è simile a tokenizer di C avrebbe funzionato, posso usare quello.
Soluzione
Non si specifica la codifica del file. Dal momento che non è possibile determinare in modo affidabile la codifica di un file automaticamente, la codifica deve essere specificato esplicitamente. Se non lo è, la codifica esterno viene utilizzato, se ciò non è impostato, la codifica specificata nell'ambiente sta per essere utilizzato, e se l'ambiente non specifica una codifica, il file viene considerato in 7 po 'US-ASCII.
Nel tuo caso, sembra che non v'è né una differenza nei due ambienti (script automatici sono spesso eseguiti in un ambiente molto restrittivo senza impostazioni locali) o nel modo in cui l'interprete viene invocato.
Quindi, avresti bisogno di fare qualcosa di simile
File.read('/path/to/file', encoding: 'UTF-8')
Altri suggerimenti
Suona come i due sono utilizzati attraverso ambienti diversi -. Con differenti valori di locale