如何正确转换UTF8到cp1252(1.8.7)

时间:2013-10-14 14:30:25

标签: ruby encoding utf-8 iconv cp1252

我不知道如何告诉Iconv将我的字符串转码为可读输出。

示例:我正在转换“带有卡伦的拉丁文大写字母”U+0160,呈现为Š

然而,

Iconv.conv('cp1252', 'UTF8', 'Š')会返回"\212"

我希望它返回等效的cp1252字符0x8A,也会呈现为Š。但是,打印结果仍为"\212" - 它是八进制表示(\2120x8A138的八进制。

我还尝试了一些更奇特的编码指令,如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"

1 个答案:

答案 0 :(得分:2)

您正在检查该值。来自IRB:

$ irb
>> "\x8A"
=> "\212"

这与:

相同
>> puts "\x8A".inspect
"\212"
=> nil

相反,您必须打印值:

>> puts "\x8A"
�
=> nil

我的终端显示“ ”,因为0x8A是UTF-8(我终端的编码)中的无效序列。如果我将终端设备更改为CP-1252,则会显示“Š”。