Я хочу использовать символ Unicode с Nokogiri::XML::DocumentFragment
.
frag = Nokogiri::XML::DocumentFragment.parse("<foo>ü</foo>")
=> <foo>ü</foo>
Символ Юникода экранирован. Мне нужно установить 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>
🤔 А знаете ли вы, что...
Ruby обеспечивает поддержку регулярных выражений с помощью класса 'Regexp'.
Согласно документации здесь текст уже хранится внутри как 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.
Поэтому, если вы вызовете, например, #text
на своем frag
вместо того, чтобы печатать весь объект 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>