Строки юникода в Ruby 1.9


Я написал сценарий Ruby, который читает файл (File.read()), содержащий символы unicode, и он отлично работает из командной строки.

Однако, когда я пытаюсь поместить его в рабочий процесс Automator (Mac OS X), я получаю эту ошибку;

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

Поэтому при запуске из Automator split внезапно не любит символы, отличные от ASCII. Насколько я могу судить, оба работают от одной и той же версии Ruby (номер версии один и тот же).

Меня не слишком волнует, почему они действуя по-разному (но если кто-то знает, это здорово), но я хотел бы получить решение, чтобы split принимал символы, отличные от ASCII.

Если это поможет, мне нужно разделить текст на один символ на две части, так что если что-то похожее на токенизатор C будет работать, я могу использовать это.

2 5

2 ответа:

Вы не указываете кодировку файла. Поскольку невозможно достоверно определить кодировку файла автоматически, кодировка должна быть задана явно. Если это не так, используется внешняя кодировка, если она не установлена, будет использоваться кодировка, указанная в среде, и если среда не указывает кодировку, предполагается, что файл находится в 7-битном US-ASCII.

В вашем случае, кажется, что есть либо разница в двух средах (автоматические сценарии часто выполняются в очень ограниченном окружении без настроек локали)или в том, как вызывается интерпретатор.

Итак, вам нужно сделать что-то вроде

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

Звучит так, как будто они запускаются из разных сред - с разными значениями локали.