将转义的unicode字符串转换为ruby 1.8中的字符

时间:2010-10-29 19:55:23

标签: ruby unicode utf-8

我必须阅读一些包含以下内容的文本文件:

\ u201C十字架上的Pedlar Lady \ u201D

在ruby 1.9终端中,当我创建一个包含此内容的字符串时:

ruby-1.9.1-p378 > "\u2714 \u2714 my great string \u2714 \u2714"
 => "✔ ✔ my great string ✔ ✔" 

在ruby 1.8中,我没有将unicode代码转换为它们的字符:

ree-1.8.7-2010.01 > "\u2714 \u2714 my great string \u2714 \u2714"
 => "u2714 u2714 my great string u2714 u2714" 

有没有简单的方法可以在Ruby 1.8中返回正确的字符串字符?

3 个答案:

答案 0 :(得分:6)

对于那些偶然发现这个问题的人(比如我)寻找答案,在Ruby 1.8中这样做的等效方法是:

["2714".to_i(16)].pack("U*")

答案 1 :(得分:5)

最简单的方法可能是使用JSON解析器,因为JSON碰巧使用这种格式:

irb(main):014:0> JSON '["\u2714 \u2714 my great string \u2714 \u2714"]'
=> ["\342\234\224 \342\234\224 my great string \342\234\224 \342\234\224"]

答案 2 :(得分:1)

这建立在@ Dave的答案之上。我正在使用以下内容将给定字符串中的所有Unicode转义序列替换为相应的字符:

string_value.gsub(/\\u([0-9a-fA-F]{4})/) {|m| [$1.hex].pack("U")}

这是一个正则表达式,用于查找“\ u”后跟4个十六进制符号。然后抛弃“\ u”,将4个十六进制符号转换为整数,并使用pack获取Unicode字符。它用相应的字符替换每个转义序列并返回结果字符串。

如果您的字符串被进一步转义(例如将“\”转义为“\\”),则会给您带来麻烦。但在香草的情况下,它应该工作正常。