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看看。

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
于 2013-03-28T06:48:22.207 回答