diff --git a/lib/nokogiri/html/document_fragment.rb b/lib/nokogiri/html/document_fragment.rb index 265f865dfd..466d0ce223 100644 --- a/lib/nokogiri/html/document_fragment.rb +++ b/lib/nokogiri/html/document_fragment.rb @@ -6,7 +6,17 @@ class DocumentFragment < Nokogiri::XML::DocumentFragment def self.parse tags, encoding = nil doc = HTML::Document.new - encoding ||= tags.respond_to?(:encoding) ? tags.encoding.name : 'UTF-8' + encoding ||= if tags.respond_to?(:encoding) + encoding = tags.encoding + if encoding == ::Encoding::ASCII_8BIT + 'UTF-8' + else + encoding.name + end + else + 'UTF-8' + end + doc.encoding = encoding new(doc, tags) diff --git a/test/html/test_document_fragment.rb b/test/html/test_document_fragment.rb index bdf999bf91..5476ffca15 100644 --- a/test/html/test_document_fragment.rb +++ b/test/html/test_document_fragment.rb @@ -9,6 +9,11 @@ def setup @html = Nokogiri::HTML.parse(File.read(HTML_FILE), HTML_FILE) end + def test_ascii_8bit_encoding + s = String.new 'hello', encoding: Encoding::ASCII_8BIT + assert_equal "hello", Nokogiri::HTML::DocumentFragment.parse(s).to_html + end + def test_inspect_encoding fragment = "
こんにちは!
".encode('EUC-JP') f = Nokogiri::HTML::DocumentFragment.parse fragment @@ -21,7 +26,7 @@ def test_html_parse_encoding assert_equal 'EUC-JP', f.document.encoding assert_equal "こんにちは!", f.content end - + def test_unlink_empty_document frag = Nokogiri::HTML::DocumentFragment.parse('').unlink # must_not_raise assert_nil frag.parent