Строки юникода в 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 ответа:
Вы не указываете кодировку файла. Поскольку невозможно достоверно определить кодировку файла автоматически, кодировка должна быть задана явно. Если это не так, используется внешняя кодировка, если она не установлена, будет использоваться кодировка, указанная в среде, и если среда не указывает кодировку, предполагается, что файл находится в 7-битном US-ASCII.
В вашем случае, кажется, что есть либо разница в двух средах (автоматические сценарии часто выполняются в очень ограниченном окружении без настроек локали)или в том, как вызывается интерпретатор.
Итак, вам нужно сделать что-то вроде
File.read('/path/to/file', encoding: 'UTF-8')