将字符串转换为实际的UTF-8字符

时间:2011-12-06 14:10:59

标签: ruby utf-8

示例文件包含此内容。 [" \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

3 个答案:

答案 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)
 => "Эрыгэжээ."