Рубин: ARGV ломает акцентированные символы - PullRequest
3 голосов
/ 07 сентября 2011
# encoding: utf-8
foo = "Résumé"
p foo

> "Резюме"

# encoding: utf-8
ARGV.each do |argument|
    p argument
end

test.rb Резюме > "R \ xE9sum \ xE9"

Почемуэто происходит, и как я могу заставить ARGV вернуть "Резюме"?

У меня уже установлена ​​ chcp 65001 , и я использую ruby ​​1.9.2p290 (2011-07-09) [i386-mingw32]

РЕДАКТИРОВАТЬ После опроса по irc, я получил указание сделать chcp 1252>NUL, что решило проблему.

1 Ответ

7 голосов
/ 08 сентября 2011

По какой-то причине Windows не использует UTF-8 в вашей консоли. Таким образом, хотя Ruby ожидает строку в кодировке UTF-8, она получает строку в кодировке Windows-1252.

Итак, у вас есть несколько возможностей (которые я не могу проверить, поскольку, к счастью, я не пользуюсь Windows):

  1. Убедите Windows использовать UTF-8 в вашей консоли. Я не знаю, должен ли chcp работать и, если да, то почему это не так.
  2. Скажите Ruby использовать Windows-1252 вместо UTF-8 по умолчанию
  3. Преобразование ARGV из Windows-1252 в UTF-8 вручную:

Пример:

>> argument = "R\xE9sum\xE9"
=> "R\xE9sum\xE9"
>> argument.force_encoding('windows-1252').encode('utf-8')
=> "Résumé"
...