Строки Unicode в Ruby 1.9 - PullRequest
       33

Строки Unicode в Ruby 1.9

5 голосов
/ 24 декабря 2009

Я написал скрипт на 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 разделение внезапно не похоже на символы, не входящие в ASCII. Насколько я могу судить, обе они работают с одной и той же версией Ruby (номер версии одинаковый).

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

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

Ответы [ 2 ]

7 голосов
/ 24 декабря 2009

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

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

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

File.read('/path/to/file', encoding: 'UTF-8')
1 голос
/ 24 декабря 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...