我不知道如何告诉Iconv
将我的字符串转码为可读输出。
示例:我正在转换“带有卡伦的拉丁文大写字母”U+0160,呈现为Š
。
Iconv.conv('cp1252', 'UTF8', 'Š'
)会返回"\212"
我希望它返回等效的cp1252字符0x8A
,也会呈现为Š
。但是,打印结果仍为"\212"
- 它是八进制表示(\212
是0x8A
或138
的八进制。
我还尝试了一些更奇特的编码指令,如cp1252//IGNORE//TRANSLIT
,输出相同。
我做错了什么,应该怎么做?
谢谢
修改
Casper说,控制台输出应正确渲染角色,但事实并非如此。也许我只是不知道如何设置它来接受cp1252。
如果有人能告诉我怎么做,我将不胜感激 - 我正在研究Ubuntu 13.04,并且使用irb和RubyMine内置控制台的常规bash将输出显示为"\212"
所有值locale
的输出均为en_US.UTF8
。
Iconv.conv('cp1252', 'UTF8', 'Š').inspect
打印"\"\\212\""
Iconv.conv('cp1252', 'UTF8', 'Š').each_byte { |b| p b }
打印138
和"\212"
答案 0 :(得分:2)
您正在检查该值。来自IRB:
$ irb
>> "\x8A"
=> "\212"
这与:
相同>> puts "\x8A".inspect
"\212"
=> nil
相反,您必须打印值:
>> puts "\x8A"
�
=> nil
我的终端显示“ ”,因为0x8A是UTF-8(我终端的编码)中的无效序列。如果我将终端设备更改为CP-1252,则会显示“Š”。