2009-12-23 6 views
5

Ich habe ein Ruby-Skript geschrieben, das eine Datei liest (File.read()), die Unicode-Zeichen enthält und über die Befehlszeile funktioniert.Unicode-Zeichenfolgen in Ruby 1.9

Wenn ich jedoch versuche, es in einen Automator Workflow (Mac OS X) zu bringen, bekomme ich diesen Fehler;

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

Wenn Sie also von Automator aus arbeiten, werden plötzlich keine ASCII-Zeichen geteilt. Soweit ich das beurteilen kann, laufen beide von der gleichen Version von Ruby (die Versionsnummer ist die gleiche).

Ich bin nicht zu besorgt darüber, warum sie sich anders verhalten (aber wenn jemand weiß, das ist großartig), aber ich möchte eine Lösung, um nicht-ASCII-Zeichen geteilt zu akzeptieren.

Wenn es hilft, muss ich Text in einem einzigen Zeichen in zwei Teile teilen, also wenn etwas, das C-Tokenizer ähnlich ist, funktionieren würde, kann ich das verwenden.

Antwort

7

Sie geben die Codierung der Datei nicht an. Da es nicht möglich ist, die Kodierung einer Datei automatisch zuverlässig zu bestimmen, muss die Kodierung explizit angegeben werden. Wenn dies nicht der Fall ist, wird die externe Codierung verwendet. Wenn diese nicht festgelegt ist, wird die in der Umgebung angegebene Codierung verwendet. Wenn die Umgebung keine Codierung angibt, wird davon ausgegangen, dass sich die Datei in 7 befindet Bit US-ASCII.

In Ihrem Fall scheint es entweder einen Unterschied in den beiden Umgebungen zu geben (automatisierte Skripte werden oft in einer sehr restriktiven Umgebung ohne Gebietsschemaeinstellungen ausgeführt) oder in der Art, wie der Interpreter aufgerufen wird.

So müssen Sie so etwas wie

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

Das funktionierte tun, danke! –

1

Klingt, als ob die beiden aus verschiedenen Umgebungen laufen - mit verschiedenen LOCALE-Werten.