将转义的XML实体转换回UTF-8

时间:2010-12-30 00:34:44

标签: ruby escaping xml-entities

所以我在XML文件中有这个UTF-8字符串:

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 个答案:

答案 0 :(得分:4)

好吧,因为它是XML编码的,我会选择XML解析器:

require 'nokogiri'

frag = 'Horrible place. ☠☠☠'
doc = Nokogiri::XML.fragment(frag)
puts doc.text
# >> Horrible place. ☠☠☠

答案 1 :(得分:2)

CGI.unescapeHTML效果很好;您正在使用的控制台可能无法显示unicode字符。

试试这个,它应该可以正常工作:

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