0

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

示例:我正在转换 "LATIN CAPITAL LETTER S WITH CARON" U+0160,呈现为Š.

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

我希望它返回等效的 cp1252 字符0x8A,也呈现为Š. 但是打印的结果仍然是"\212"- 它是八进制表示(\212对于0x8Aor是八进制138)。

我还尝试了一些更奇特的编码指令,例如cp1252//IGNORE//TRANSLIT,具有相同的输出。

我做错了什么,应该怎么做?

谢谢

编辑

Casper 说,控制台输出应该正确呈现字符,但事实并非如此。也许我只是不知道如何将其设置为接受 cp1252。

如果有人能告诉我该怎么做,我将不胜感激 - 我正在使用 Ubuntu 13.04 并且带有 irb 的常规 bash 和 RubyMine 的内置控制台都将输出显示为"\212"

的输出locale适用en_US.UTF8于所有值。

Iconv.conv('cp1252', 'UTF8', 'Š').inspect印刷"\"\\212\""

Iconv.conv('cp1252', 'UTF8', 'Š').each_byte { |b| p b }印刷品138"\212"

4

1 回答 1

2

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

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

这与以下内容相同:

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

相反,您必须打印该值:

>> puts "\x8A"
�
=> nil

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

于 2013-10-14T15:28:05.633 回答