【问题标题】:File.Open encoding broken for rendered HTML Entities呈现的 HTML 实体的 File.Open 编码损坏
【发布时间】:2012-10-20 09:24:31
【问题描述】:

我有一个包含 300 多个 HTML 文件的目录,我需要从中解析数据并将其放入一个新的 HTML 模板中,该模板运行良好,但预渲染的 HTML 实体(如平方根)除外的文件。在过去的几个小时里,我阅读了大量关于 Ruby 1.9 编码的帖子,并尝试了以下内容:

File.read( "_pending/testdir/filename.html", :encoding=>"UTF-8" )

trans = Iconv.new( 'UTF-8', 'IBM437' )
input_text = File.read( "_pending/testdir/filename.html" )
output_text = trans.iconv( input_text )
puts output_text

一切都没有运气。转换后,平方根符号在浏览器和原始 HTML 标记中仍然显示为 √,但 Iconv 解决方案除外,它在 puts 时将 AªAo 输出到控制台。

设置

Windows Server 2008 R2

ruby 1.9.3p194 (2012-04-20) [i386-mingw32]

当我执行HTML_FILE.external_encoding.name 时,编码名称返回IBM437

【问题讨论】:

  • 您确定它们是“IBM437”吗? Win-1252ISO-8859-1 更有可能是候选人。另一种方法是预先通过并将复选标记添加到实体中。
  • 我同意,看起来很奇怪,但是当我运行下面的代码时,我得到了IBM437test = File.open( "filename.html" ) puts test.external_encoding.name test.close
  • 感谢 Tin Man,事实证明我只是个白痴,Ruby 根本不是问题……感谢您代表我调查此事。

标签: ruby encoding character-encoding


【解决方案1】:

你一定是在开玩笑吧……

解决方法是在 HTML 模板页面中设置内容标题。我猜控制台输出的是有效的 UTF-8,但不是可识别的格式。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

虽然我现在觉得自己很愚蠢,但我相信其他人也会遇到类似的事情,所以如果是你:我能感觉到你的痛苦;我只是希望您没有像我一样花费过去 6 小时进行故障排除。

【讨论】:

  • 混合编码与 HTTPd 服务器与实际内容相比,在网络上进行爬虫和进行内容分析时确实很痛苦。而且,即使服务器和 HTML 标头一致,用户也可以通过多种方式将原始 8 位和 unicode 字符注入文档。尝试编写代码来防御它可能是一个真正的大脑燃烧器。
猜你喜欢
  • 1970-01-01
  • 2016-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多