0

私はその仕組みを理解しようとしていましたARGF#putc。私は実際にテストを行っていましたmultibyte character sets

サンプルは次のとおりです。

$stdout.putc 63 #<~~~ A
#?=> 63
$stdout.putc 191
#?=> 191
$stdout.putc 181
#?=> 181
$stdout.putc 166
#?=> 166

ここで私の質問は、行Aを除いて、すべてのステートメントが印刷されるのはなぜ?ですか?

私のRubyバージョンは次のとおりです。

D:\Rubyscript\My ruby learning days>ruby -v
ruby 2.0.0p0 (2013-02-24) [i386-mingw32]
4

1 に答える 1

1

コンソールのデフォルトのエンコーディング (または Windows のコード ページ) によって異なります。chcp駆け込んで確認できますcmd.exe

\x00ASCII 文字には、 からまでの文字または制御文字が含まれ\x7Fます。マルチバイト文字セットは、ASCII および\x80-\xFF. あなたの投稿から推測すると、コンソールのデフォルトのコードページは ISO-8859-1 と互換性がないため、コンソールはこれらの文字を\x80-\xFF.

コンソールに出力する前に、エンコード変換を行う必要があります。

putc 191.chr.force_encoding('ISO-8859-1').encode('UTF-8')

# UTF-8 is the default encoding used in my Linux environment
# you need to replace it with your console's default encoding
于 2013-03-28T06:48:22.207 に答える