字符0x91
,0x92
,0x93
和0x94
应该代表Unicode中的U+2018
,U+2019
,{ {1}},U+201c
,或“打开单引号”,“关闭单引号”,“打开双引号”和“关闭双引号”。我认为它是U+201d
但是当我尝试使用ISO-8859-1
处理文件时,它仍然无法识别这些字符。
如果不是IO.read('file', :encoding=>'ISO-8859-1')
那么它是什么?如果是的话,红宝石为什么不认识这些角色?
更新:显然这个编码应该是Windows-1252。但是当我ISO-8859-1
时,红宝石仍然无法识别这些字符。
更新2:没关系,IO.read('file', :encoding=>'Windows-1252')
有效。
答案 0 :(得分:3)
0x91是Unicode \u2018
(AKA ‘
)的Windows-1251表示形式:
>> "\x91".force_encoding('windows-1251').encode('utf-8')
=> "‘"
Windows-1251和Latin-1(AKA ISO 8859-1)不一样,尝试使用windows-1251
作为编码:
IO.read('file', :encoding => 'windows-1251')
这会给你一个知道它是Windows-1251的字符串。如果你想要UTF-8,那么也许你想要指定:internal_encoding
and :external_encoding
:
IO.read('file', :external_encoding => 'windows-1251', :internal_encoding => 'utf-8')