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