【问题标题】:Open iso-8859-1 encoded html with nokogiri messes up accents打开带有 nokogiri 的 iso-8859-1 编码的 html 会弄乱口音
【发布时间】:2012-03-16 16:30:10
【问题描述】:

我正在尝试对使用 charset=iso-8859-1 编码的 html 页面进行一些更改

doc = Nokogiri::HTML(open(html_file))

puts doc.to_html 会弄乱页面中的所有重音符号。因此,如果我将其保存回来,它在浏览器中也会出现问题。

我仍在使用 Rails 3.0.6... 任何提示如何解决这个问题?

这是遭受此问题的页面之一,例如:http://www.elmundo.es/accesible/elmundo/2012/03/07/solidaridad/1331108705.html

我也在 Github 上问过,但我觉得这会更快。如果我能解决问题,我会更新这两个地方。

更新 1 2012 年 3 月 24 日

感谢 cmets。我设法部分解决了这个问题。 然而,我相信这与 Nokogiri 无关。正如我在一些评论中提到的,我只需要打开并保存文件即可将口音弄乱。

我得到的最接近修复的是这样做:

thefile = File.open(html_file, "r") 
text =  thefile.read
doc = Nokogiri::HTML(text)
... do any stuff with nokogiri
File.open(html_file, 'w') {|f| f.write(doc.to_html) }

原始文件带有iso-8859-1,保存的文件几乎是utf-8,看起来还可以。口音到位。除了大写字母中的访问:-P 我得到像 Econom�a 中一样的问号,应该有 í(带重音的 i)

我想越来越近了。如果有人暗示要遮盖大写字母,那可能就差不多完成了。

干杯。

【问题讨论】:

  • 只需将doc 保存到文件中即可为我保留重音符号。您是如何修改和保存文档的?
  • 谢谢约翰。 File.open(html_file, 'w') {|f| f.write(doc.to_html) } 我是这样保存的,不需要做任何改变来弄乱口音。该文件的原始位置在我的驱动器上,而不是从网上获取。我有 OSX 10.6,我的 ruby​​ 版本是 1.9.2

标签: ruby encoding nokogiri


【解决方案1】:

您用于下载文件的方法可能更改了编码,破坏了文件中的重音符号。试试这个看看它是否正常工作:

require 'rubygems'
require 'nokogiri'
require 'open-uri'

url = 'http://www.elmundo.es/accesible/elmundo/2012/03/07/solidaridad/1331108705.html'
doc = Nokogiri::HTML(open(url))
File.open("1331108705.html", "w") {|f| f.write(doc.to_html)}
system('open', '1331108705.html') # on Mac OS X, this will open the html file in your browser

你是如何下载文件的?

【讨论】:

  • 谢谢。是的,对不起,我应该提到文件如何进入我的应用程序。它是使用 wget 下载的。我需要使用 wget,因为我获得了页面和需要在本地查看的所有资源。我仍然需要清理文件中的一些东西,这就是为什么我必须打开它并进行一些更改。我已经使用其他使用 utf8 或未定义编码的文件进行了测试,并且重音一切正常。 Nokogiri 有这个问题似乎相关但我不确定所以我也在那里留下了一个帖子github.com/tenderlove/nokogiri/issues/482
  • 忘了说wget下载的文件是ok的。当它们用浏览器打开时一切正常。
  • 使用十六进制编辑器将 wget 的输出与File.open('temp.html', 'w') {|f| f.write(open(url).read) } 进行比较
猜你喜欢
  • 1970-01-01
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-21
  • 1970-01-01
  • 2011-02-12
相关资源
最近更新 更多