Ruby:ARGV打破重音字符

Sau*_*man 3 ruby unicode encoding argv

# encoding: utf-8
foo = "Résumé"
p foo
Run Code Online (Sandbox Code Playgroud)

>"简历"

# encoding: utf-8
ARGV.each do |argument|
    p argument
end
Run Code Online (Sandbox Code Playgroud)

test.rb简历 >"R\xE9sum\xE9"

为什么会发生这种情况,我怎样才能让ARGV返回"Résumé"?

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

编辑在询问irc之后,我被指示做chcp 1252>NUL了解决问题的方法.

Mla*_*vić 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:

例:

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