gpt4 book ai didi

ruby - Ruby 中的 UTF-8 错误

转载 作者:数据小太阳 更新时间:2023-10-29 07:29:14 52 4
gpt4 key购买 nike

我正在抓取一些网站,最终我遇到了一个 UTF-8 错误,如下所示:

/usr/local/lib/ruby/gems/1.9.1/gems/dm-core-1.2.0/lib/dm-core/support/ext/blank.rb:19:in
`=~': invalid byte sequence in UTF-8 (ArgumentError)

现在,我不关心网站是否 100% 准确。有没有一种方法可以获取我获得的页面并去除任何有问题的编码,然后在我的程序中传递它?

如果重要的话,我正在使用 ruby 1.9.3p0(2011-10-30 修订版 33570)[x86_64-darwin11.2.0]

更新:

def self.blank?(value)
return value.blank? if value.respond_to?(:blank?)
case value
when ::NilClass, ::FalseClass
true
when ::TrueClass, ::Numeric
false
when ::Array, ::Hash
value.empty?
when ::String
value !~ /\S/ ###This is the line 19 that has the issue.
else
value.nil? || (value.respond_to?(:empty?) && value.empty?)
end
end
end

当我尝试保存以下行时:

What Happens in The Garage Tin Sign2. � � Newsletter Our monthly newsletter,

它抛出错误。它在页面上:http://www.stationbay.com/ .但奇怪的是,当我在网络浏览器中查看它时,它并没有显示源代码中的有趣符号。

接下来我该做什么?

最佳答案

问题是您的字符串包含非 UTF-8 字符,但似乎强制使用了 UTF-8 编码。以下简短代码演示了该问题:

a = "\xff"
a.force_encoding "utf-8"
a.valid_encoding? # returns false
a =~ /x/ # provokes ArgumentError: invalid byte sequence in UTF-8

解决此问题的最佳方法是从一开始就应用正确的编码。如果这不是一个选项,您可以使用 String#encode :

a = "\xff"
a.force_encoding "utf-8"
a.valid_encoding? # returns false

a.encode!("utf-8", "utf-8", :invalid => :replace)
a.valid_encoding? # returns true now
a ~= /x/ # works now

关于ruby - Ruby 中的 UTF-8 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8368835/

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