’ 在轨道上的ruby中由nokogiri转换为“\ u0092”

我有html页面,其中包含一些html实体,如“’”。

#Here I am not pasting whole html page content. just putting issue line only html_file = "....

they’re originally intended to describe the spread of of viral diseases, but they’re nice analogies for how web/SN apps grow.

..." doc = Nokogiri::HTML(html) body = doc.xpath('//body') body_content = body[0].inner_html puts body_content

结果:

 These terms come from the fields of medicine and biology they\u0092re originally intended to describe the spread of of viral diseases, but they\u0092re nice analogies for how web/SN apps grow. 

我想保留这些实体,而不是将其更改为unicode。 什么事,我错过了吗?

谢谢

 they’re 

是错的,应该避免。 如果你想在那里使用一个单引号,要重现将撇号作为倾斜引号进行渲染的排版练习,那么正确的字符是U + 2019 RIGHT SINGLE QUALATION MARK,可以写成 。 或者,如果您使用的是UTF-8,则只需将其逐字包含为'

应该引用字符U + 0092,一个很少使用和无意义的控制字符,通常呈现为空白或缺少字形框。 确实在XML中,确实如此。

但是在HTML(除了XHTML,它使用XML规则)之外,它是一个长期存在的浏览器怪癖,该角色在范围内引用Ÿ 被错误解释为与Windows Western代码页(cp1252)中的字节128到159相关联的字符,而不是具有这些代码点的Unicode字符。 HTML5标准最终记录了这种行为。

问题在于Nokogiri不知道这个怪癖,并且在其单词中引用了字符引用146,结果是你不想要的字符146( \u0092 )。 我认为Nokogiri正在使用libxml2来解析HTML,所以最终正确的解决方法是使用libxml2的htmlParseCharRef函数替换字符128-159。

与此同时,您可以尝试使用粗略的字符串替换手动“修复”字符引用,例如 – > 在解析之前。 这有点不对,但至少在HTML中,你可以拥有标记序列的唯一其他地方 没有它作为一个字符参考将在评论中,所以希望如果你不小心改变了那里的内容也没关系。

你有没有尝试过改变

 ’ 

  

我认为解析器首先解析&符号,然后用“#146”对其进行汇总,然后解析它们。 这只是一个意见..我希望这只是一个评论IDK how..lol

好吧,我从这里的答案post中得到了focos的想法,以及来自这里的unicode。