我必须阅读一些包含以下内容的文本文件:
\ 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中返回正确的字符串字符?
答案 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字符。它用相应的字符替换每个转义序列并返回结果字符串。
如果您的字符串被进一步转义(例如将“\”转义为“\\”),则会给您带来麻烦。但在香草的情况下,它应该工作正常。