如何告诉Nokogiri不要将文档转换为其他编码,在我的情况下不要将&paund;
转换为其他任何内容?
我有一个包含以下内容的文件:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<span>£</span>
</body>
</html>
我用Nokogiri解析它:
d = Nokogiri::HTML.parse(open('/tmp/in.html', 'r'))
如果我打印文档“d
”,我会得到:
<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n
<html>\n
<head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\"></head>\n
<body>\n
<span>\302\243</span>\n
</body>\n
</html>\n
注意:£
变成了“\ 302 \ 243”(或者在ISO-8859-1中编码的£
以UTF-8编码)
如果我将文档“d”保存到文件中:
open('/tmp/out.html', 'w') do |out|
out << d.to_html
end
我得到以下内容:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>
<body>
<span>ВЈ</span>
</body>
</html>
使用&paund;
解析文档并将其保存到文件后,我得到了两个符号“BJ
”。
我想我不会在某个步骤指定编码,但我不确定在哪里。
答案 0 :(得分:1)
Nokogiri从文档中定义'parse',寻找编码:
# File lib/nokogiri/html.rb, line 22
22: def parse thing, url = nil, encoding = nil, options = XML::ParseOptions::DEFAULT_HTML, &block
23: Document.parse(thing, url, encoding, options, &block)
24: end