gpt4 book ai didi

ruby - 使用 Ruby 编码 Unicode 代码点

转载 作者:太空宇宙 更新时间:2023-11-03 18:27:40 24 4
gpt4 key购买 nike

我正在检索使用 Nokogiri 解析的 HTML 文档。 HTML 使用字符集 ISO-8859-1。问题是文档中有一些 Unicode 字符被转换为 Unicode 代码点而不是它们各自的字符。

例如,这是收到的 HTML 中的一些文本(在 ISO-8859-1 中):

\x95\x95 JOHNNY VENETTI \x95\x95

当尝试使用此文本时,它会转换为:

\u0095\u0095 JOHNNY VENETTI \u0095\u0095

所以我的问题是,我怎样才能确保这些字符被表示为它们适当的字符而不是代码点?我试过在文本上做一个 gsub,但这似乎是错误的。此外,我无法控制 HTML 文档的编码。

最佳答案

首先你应该意识到这个字符串是 NOT ISO-8859-1 编码的(file says "Non-ISO extended-ASCII text"the codepage 验证了这一点)。很可能这是您的问题,在这种情况下,您应该在 HTML 文档中指定正确的编码(在本例中可能类似于 Windows-1252 )。

在 Nokogiri 中,您还可以在文档指定错误编码的情况下显式设置编码:

Nokogiri.HTML("<p>\x95\x95 JOHNNY VENETTI \x95\x95</p>", nil, "Windows-1252")
# => #<Nokogiri::HTML::Document: ...
# children=[#<Nokogiri::XML::Text:0x15744cc "•• JOHNNY VENETTI ••">]>]>]>]>

如果您没有像上面那样干净地解决这个问题的选项,您也可以用困难的方式来解决这个问题,并将字符串与其正确的编码相关联:

s = "\x95\x95 JOHNNY VENETTI \x95\x95"
s.encoding # => #<Encoding:ASCII-8BIT>
s.force_encoding 'Windows-1252'
s.encode! 'utf-8'
s # => "•• JOHNNY VENETTI ••"

请注意,最后一段代码仅适用于 Ruby 1.9。如果你愿意,你可以阅读more about the new encoding system in Ruby 1.9 .

关于ruby - 使用 Ruby 编码 Unicode 代码点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8779083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com