1

尝试将来自 rest_client GET 的输出转换为用转义序列表示的字符。

输入:..."sub_id":"\u0d9c\u8138\u8134\u3f30\u8139\u2b71"...

(我把它放在'all_subs'中)

匹配:m = /sub_id\"\:\"([^\"]+)\"/.match(all_subs.to_str) [1]

打印:puts m.force_encoding("UTF-8").unpack('U*').pack('U*')

但它的输出方式与我输入的方式相同。即“\u0d9c\u8138\u8134\u3f30\u8139\u2b71”

但是,如果我转换它的原始字符串:

puts "\u0d9c\u8138\u8134\u3f30\u8139\u2b71".unpack('U*').pack('U*')

输出完美为“ග脸脴㼰胀⭱”

4

1 回答 1

0

解析输入字符串时得到的实际上是这样的:

m = "\\u0d9c\\u8138\\u8134\\u3f30\\u8139\\u2b71"

这与以下内容不同:

"\u0d9c\u8138\u8134\u3f30\u8139\u2b71"

因此,一种选择是eval字符串,以便 ruby​​ 应用代码点:

puts eval("\"#{m}\"")
=> ග脸脴㼰脹

但是请注意,运行 eval 时存在安全隐患。

如果字符串总是像你的例子一样。你也可以这样做,这是安全的:

puts m.split("\\u")[1..-1].map { |c| c.to_i(16) }.pack("U*")
=> ග脸脴㼰脹
于 2012-06-22T15:27:51.220 回答