Преобразование экранированных сущностей XML обратно в UTF-8 - PullRequest
4 голосов
/ 30 декабря 2010

Итак, у меня есть строка UTF-8 в файле XML:

Horrible place. ☠☠☠

И когда я передаю ее во внешнее приложение, забавные символы возвращаются в виде сущностей XML:

Horrible place. ☠☠☠

В Ruby, как мне преобразовать эту строку обратно в UTF-8?Вероятно, есть действительно простое решение для этого, но я не могу найти ничего в стандартных библиотеках;например.CGI.unescapeHTML (которые хорошо работают для таких вещей, как >), похоже, полностью их игнорируют.

ree-1.8.7-2010.02 > CGI.unescapeHTML('>')
 => ">" 
ree-1.8.7-2010.02 > CGI.unescapeHTML('☠')
 => "☠" 

Ответы [ 2 ]

4 голосов
/ 30 декабря 2010

Ну, так как он закодирован в XML, я бы пошел на парсер XML:

require 'nokogiri'

frag = 'Horrible place. ☠☠☠'
doc = Nokogiri::XML.fragment(frag)
puts doc.text
# >> Horrible place. ☠☠☠
2 голосов
/ 30 декабря 2010

CGI.unescapeHTML работает просто отлично; консоль, которую вы используете, вероятно, не может отображать символы Юникода.

Попробуйте, и все должно работать нормально:

File.open("d:\\11.txt", 'w') {|f| f.write(CGI.unescapeHTML('☠')) } # => ☠
...