Ruby:ARGV打破重音字符

时间:2011-09-07 19:33:52

标签: ruby unicode encoding argv

# encoding: utf-8
foo = "Résumé"
p foo

> “RESUME”

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

test.rb简历> “R \ xE9sum \ xE9”

为什么会发生这种情况,如何让ARGV返回“Résumé”?

我已经设置 chcp 65001 并使用 ruby​​ 1.9.2p290(2011-07-09)[i386-mingw32]

编辑在询问irc之后,我被指示执行chcp 1252>NUL来解决问题。

1 个答案:

答案 0 :(得分:7)

出于某种原因,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:
  4. 示例:

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