Строки Unicode в Ruby 1.9

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

Однако, когда я пытаюсь поместить его в рабочий процесс 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 (номер версии одинаков).

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

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


person Jeffrey Aylesworth    schedule 23.12.2009    source источник


Ответы (2)


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

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

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

File.read('/path/to/file', encoding: 'UTF-8')
person Jörg W Mittag    schedule 24.12.2009

Похоже, что они запускаются из разных сред - с разными значениями LOCALE.

person Paul Beckingham    schedule 23.12.2009