ruby字符串编码

ruby字符串编码,ruby,utf-8,character-encoding,nokogiri,iso-8859-1,Ruby,Utf 8,Character Encoding,Nokogiri,Iso 8859 1,因此,我试图对使用nokogiri进行一些屏幕清理,但网站所有者未能在标记中指定页面的正确编码。结果是,我试图处理那些认为自己是utf-8,但实际上不是的字符串 (如果您介意,以下是我用来测试此功能的文件: 主文件: ann.html: ann2.html: ann3.html: a-p.html: 输出: ) 在进行了大量搜索(特别有用)之后,我发现在测试字符串“工作”上调用encode('iso-8859-1','utf-8'),我得到了一个正确的©符号。现在的问题是,我想要的其他字符串

因此,我试图对使用nokogiri进行一些屏幕清理,但网站所有者未能在
标记中指定页面的正确编码。结果是,我试图处理那些认为自己是utf-8,但实际上不是的字符串

(如果您介意,以下是我用来测试此功能的文件:

  • 主文件:
  • ann.html:
  • ann2.html:
  • ann3.html:
  • a-p.html:
  • 输出:
)

在进行了大量搜索(特别有用)之后,我发现在测试字符串“工作”上调用
encode('iso-8859-1','utf-8')
,我得到了一个正确的©符号。现在的问题是,我想要的其他字符串中的其他字符在转换为拉丁编码时确实不起作用(
Shōta
,例如,转换为
Sh)�\x8Dta


现在,我可能会打扰相应的网站管理员,并试图让他们修复他们该死的编码,但与此同时,我希望能够使用我得到的字节。我相当肯定有一种方法,但我一生都搞不清楚它是什么。

这些页面似乎正确地编码为UTF-8。这就是我的浏览器看到它们的方式,当我查看它们的源代码并告诉编辑器将它们解码为UTF-8时,它们看起来很好。我看到的唯一问题是,一些版权符号在添加到内容之前(或添加到内容中时)似乎已经损坏。o-macron和其他非ASCII字母可以很好地通过

我不知道您是否意识到这一点,但通知客户页面编码的正确方法是通过页眉。页面可能在
标签中包含该信息,但这既不是必需的,也不是预期的;如果存在标头,浏览器通常会忽略此类标记


因为您的页面是XHTML,所以它们也可以将编码信息嵌入XML处理指令中,但同样,它们不需要这样做。但这意味着可以让Nokogiri将它们作为XML而不是HTML处理,在这种情况下,我希望它默认使用UTF-8。但我不熟悉Nokogiri,所以我不能确定。无论如何,头仍然是最终的权限。

因此,问题是ANN只指定通过头进行编码,而Nokogiri不从open()函数接收头。所以,Nokogiri猜测页面是拉丁编码的,并且生成的字符串我们真的无法反转以从中获取原始字符


您可以将Nokogiri的编码指定为Nokogiri::HTML()的第三个参数,这解决了我最初试图解决的问题。所以,我会接受这个答案,尽管我问的更具体的问题(如何从拉丁字符串中提取非拉丁字符)无法回答。

是的,Firefox报告说该页面是utf-8编码的,并且它的浏览效果很好。问题是,当我从中提取字符串时,它们似乎是一些奇怪的拉丁编码,但包括unicode字符编码,这相当烦人,而且完全令人困惑。使用文件的本地副本时,添加适当的标记修复了此问题,但我不确定如果服务器已发送utf-8头,为什么会出现此问题:/