示例文件包含此内容。
[" \u042D\u0440\u044B\u0433\u044D\u0436\u044D\u044D. \n"]
我想用实际的utf-8字符替换\u[a-zA-Z0-9]
个字符。
该怎么办?
File.new("mnosis.xml").each_line do |line|
re = /\\u[0-9a-fA-F]{4}/
new_str = line.gsub(re) {|match| puts match[0..1] + '#{' + match[2..5] + '}' }
puts new_str
end
答案 0 :(得分:5)
new_str = line.gsub(re) {|match| Array(match[2..5].to_i(16)).pack('U') }
=> "Эрыгэжээ."
答案 1 :(得分:1)
\u
个字符是真正的UTF-8字符。 \u
是一种表达方式,可以在非UTF-8编辑器中使用它们。 Ruby看到\u
和实际的字符字符相同。
答案 2 :(得分:1)
eval可以解决问题:
ruby-1.9.2 > str = '\u042D\u0440\u044B\u0433\u044D\u0436\u044D\u044D.'
=> "\\u042D\\u0440\\u044B\\u0433\\u044D\\u0436\\u044D\\u044D."
ruby-1.9.2 > str_to_eval = "\"#{str}\""
=> "\"\\u042D\\u0440\\u044B\\u0433\\u044D\\u0436\\u044D\\u044D.\""
ruby-1.9.2 > res = eval(str_to_eval)
=> "Эрыгэжээ."