【发布时间】:2013-10-22 03:48:18
【问题描述】:
我不知道如何告诉Iconv 将我的字符串转码为可读输出。
示例:我正在转换“带有 CARON 的拉丁大写字母 S”U+0160,呈现为 Š。
Iconv.conv('cp1252', 'UTF8', 'Š') 然而返回"\212"
我希望它返回等效的 cp1252 字符 0x8A,也呈现为 Š。然而,打印的结果仍然是"\212" - 它是八进制表示(\212 是八进制的0x8A 或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"
【问题讨论】:
-
听起来对我来说是正确的。
puts "\212"应该在你的终端配置为 cp1252 时输出你需要的东西? -
Casper 是对的——您必须将字符串从 Ruby 获取到知道如何正确显示它的设备。 Ruby 不会为您呈现字形,如果有疑问
irb或inspect将输出转义的八进制数,因此至少您可以清楚地看到字符串中的内容。 -
@Casper 这就是我的预期,但是我得到的字面意思是“\212”,这就是我问的原因。请查看编辑。
标签: ruby encoding utf-8 iconv cp1252