2013-03-28 73 views
0

我是想明白是怎麼ARGF#putc作品。我其實在做試驗用multibyte character sets混淆multibytecharacter集和`putc`

下面是示例:

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

現在的問題是,除了線一個 - 爲什麼每個報表打印?

Ruby的版本是:

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

回答

1

這取決於默認的編碼(或代碼頁窗)爲您的控制檯。您可以在cmd.exe中運行chcp進行檢查。

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 
+0

當然這不會幫助。 Windows根本不使用UTF-8編碼。您只需複製粘貼並忽略註釋。此外,您可能會發現您的控制檯的編碼無法在我的計算機上的'ISO-8859-1'中編碼191,控制檯使用GBK並且它沒有該字符。 – 2013-03-28 06:57:25

+0

看來你是這種'字符編碼'問題的主人。 :)你可以加入這裏 - http://chat.stackoverflow.com/rooms/24194/ruby – 2013-03-28 06:58:05