如何在 Nokogiri::XML::DocumentFragment 中使用 Unicode 字符

How to use Unicode chars with Nokogiri::XML::DocumentFragment

我想在 Nokogiri::XML::DocumentFragment 中使用 Unicode 字符。

frag = Nokogiri::XML::DocumentFragment.parse("<foo>ü</foo>")
=> <foo>&#xFC;</foo>

unicode 字符被转义。我需要设置 encoding: 'UTF-8' 以获得可读的字符。

frag.to_html(encoding: 'UTF-8')
=> "<foo>ü</foo>"

解析字符串时是否有编码选项?

Nokogiri::HTML::DocumentFragment.parse 按我的预期处理字符串,但我需要使用 XML.

frag = Nokogiri::HTML::DocumentFragment.parse("<foo>ü</foo>")
=> <foo>ü</foo>

根据文档here,文本已在内部存储为 UTF-8。

Strings are always stored as UTF-8 internally. Methods that return text values will always return UTF-8 encoded strings. Methods that return XML (like to_xml, to_html and inner_html) will return a string encoded like the source document.

因此,如果您在 frag 上调用 #text 而不是打印整个 frag 对象,您会看到 ü 正确打印

puts frag.text
# => ü

否则你可以直接使用#XML代替#DocumentFragment并显式传递编码。

doc = Nokogiri.XML('<foo>ü</foo>', nil, 'UTF-8')
puts doc

# => <?xml version="1.0" encoding="UTF-8"?>
# => <foo>ü</foo>