Ruby:ARGV 破坏重音字符

发布于 2024-12-03 20:08:31 字数 475 浏览 1 评论 0原文

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

> "Résumé"

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

test.rb Résumé > > "R\xE9sum\xE9"

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

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

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

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

> "Résumé"

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

test.rb Résumé > "R\xE9sum\xE9"

Why does this occur, and how can I get ARGV to return "Résumé"?

I have chcp 65001 set already and am using ruby 1.9.2p290 (2011-07-09) [i386-mingw32]

EDIT After asking around on irc, I was instructed to do chcp 1252>NUL which fixed the problem.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

錯遇了你 2024-12-10 20:08:31

由于某种原因,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é"

For some reason, Windows doesn't use UTF-8 in your console. So, although Ruby expects UTF-8 encoded string, it gets Windows-1252 encoded string.

So you have several possibilities (which I can't test as I, fortunately, don't use Windows):

  1. Persuade Windows to use UTF-8 in your console. I don't know if chcp should work and, if so, why it doesn't.
  2. Tell Ruby to use Windows-1252 instead of UTF-8 as default
  3. Convert ARGV from Windows-1252 to UTF-8 manually:

Example:

>> argument = "R\xE9sum\xE9"
=> "R\xE9sum\xE9"
>> argument.force_encoding('windows-1252').encode('utf-8')
=> "Résumé"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文