混淆多字符集和`putc`

时间:2013-03-28 06:30:50

标签: ruby

我试图了解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]

1 个答案:

答案 0 :(得分:1)

这取决于控制台的默认编码(或Windows上的代码页)。您可以在chcp中运行cmd.exe进行检查。

ASCII字符包含从\x00\x7F的字符或控制字符。多字节字符集使用ISO-8859-1编码,其中包含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