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 に "Résumé" を返すにはどうすればよいですか?

私はすでに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. コンソールでUTF-8を使用するようにWindowsを説得します。chcpうまくいくべきかどうか、もしそうなら、なぜうまくいかないのかわかりません。
  2. デフォルトとしてUTF-8の代わりにWindows-1252を使用するようにRubyに指示します
  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 に答える