Преобразовать строку в реальный символ UTF-8 - PullRequest
1 голос
/ 06 декабря 2011

образец файла содержит это.[" \u042D\u0440\u044B\u0433\u044D\u0436\u044D\u044D. \n"]

Я хочу заменить \u[a-zA-Z0-9] символов действительным символом utf-8.Что должно быть сделано?

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 ]

5 голосов
/ 06 декабря 2011
new_str = line.gsub(re) {|match| Array(match[2..5].to_i(16)).pack('U') }
=> "Эрыгэжээ."
1 голос
/ 06 декабря 2011

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)
 => "Эрыгэжээ."
1 голос
/ 06 декабря 2011

Символы \u являются реальными символами UTF-8.\u - это способ выразить их так, чтобы их можно было использовать в редакторах не-UTF-8.Руби видит \u и реальный характер персонажа одинаковыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...