3
# 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解决问题的方法。

4

1 回答 1

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é"
于 2011-09-07T20:34:09.073 回答