> Still I am getting `nil`.
>
> doc = Nokogiri::HTML::Document.new("<title> Save the page! </title>")
> doc.meta_encoding="<meta http-equiv=\"Content-Type\"
> content=\"text/html; charset=utf-8\">"
> doc.meta_encoding # => nil
You're confusing #new with #parse, as well as what the input to
#meta_encoding should be.
irb(main):027:0> doc = Nokogiri::HTML::Document.parse "<title> Save the page! </title>"
#<Nokogiri::HTML::Document:0x4c2aa20 name="document" children=[#<Nokogiri::XML::DTD:0x4c35fc4 name="html">, #<Nokogiri::XML::Element:0x4c35a38 name="html" children=[#<Nokogiri::XML::Element:0x4c3565a name="head" children=[#<Nokogiri::XML::Element:0x4c35470 name="title" children=[#<Nokogiri::XML::Text:0x4c35196 " Save the page! ">]>]>]>]>
irb(main):028:0> puts doc
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title> Save the page! </title>
</head></html>
nil
irb(main):029:0> doc.meta_encoding
"UTF-8"
irb(main):030:0> doc.meta_encoding="ISO-8599-2"
"ISO-8599-2"
irb(main):031:0> doc.meta_encoding
"ISO-8599-2"
Also, since you are parsing fragments instead of documents, you really
should be using DocumentFragment instead of Document.
irb(main):032:0> docf = Nokogiri::HTML::DocumentFragment.parse "<title> Save the Page! </title>"
#<Nokogiri::HTML::DocumentFragment:0x4d30514 name="#document-fragment" children=[#<Nokogiri::XML::Element:0x4d303ca name="title" children=[#<Nokogiri::XML::Text:0x4d300a0 " Save the Page! ">]>]>
irb(main):033:0> puts docf
<title> Save the Page! </title>
nil
irb(main):034:0> docf.respond_to?(:meta_encoding)
false
Since the encoding only makes sense when you assemble the entire
document to send it out to the browser, fragments don't care.
What remains is still how to get Nokogiri to recognize and emit HTML5.