Чтение файлов в кодировке ASCII с Ruby 1.9 в среде UTF-8 - PullRequest
5 голосов
/ 10 сентября 2010

Я только что обновил Ruby 1.8 до 1.9, и большинство моих сценариев обработки текста теперь не работают с ошибкой invalid byte sequence in UTF-8.Мне нужно либо удалить недопустимые символы, либо указать, что Ruby должен использовать вместо этого кодировку ASCII (или любую другую кодировку, которую пишут функции C stdio, то есть как создаются файлы) - как мне поступить, выполнив одно из этих действий??

Предпочтительно последний, потому что (насколько я могу судить) нет ничего плохого в файлах на диске - если есть странные, недопустимые символы, они не появляются в моем редакторе ...

1 Ответ

1 голос
/ 10 сентября 2010

Какая ваша локаль установлена ​​в оболочке? В системах на основе Linux вы можете проверить это, введя команду locale и изменив ее, например, на.

$ export LANG=en_US

Я предполагаю, что вы используете настройки локали с кодировкой UTF-8, и это заставляет Ruby предполагать, что текстовые файлы были созданы в соответствии с правилами кодирования utf-8. Вы можете увидеть это, попробовав

$ LANG=en_GB ruby -e 'warn "foo".encoding.name'
US-ASCII
$ LANG=en_GB.UTF-8 ruby -e 'warn "foo".encoding.name'
UTF-8

Для более общего понимания того, как изменилось строковое кодирование в Ruby 1.9, я настоятельно рекомендую http://blog.grayproductions.net/articles/ruby_19s_string

(примеры кода предполагают bash или аналогичную оболочку - производные C-оболочки различны)

...