Encoding::UndefinedConversionError(“\xE2”from ASCII-8BIT to UTF-8):基于ROR + MongoDB的应用程序出错

mwkjh3gx  于 2023-08-04  发布在  Go
关注(0)|答案(2)|浏览(130)

让开发人员编写此方法并导致Encoding::UndefinedConversionError(“\xE2”from ASCII-8BIT to UTF-8):错误
此错误仅随机发生,因此进入原始DB字段的数据是导致问题的原因。但是,由于我对此没有任何控制,我可以在下面的方法中放置什么来解决这个问题,以便不好的数据不会导致任何问题?

def scrub_string(input, line_break = ' ')
  begin
     input.an_address.delete("^\u{0000}-\u{007F}").gsub("\n", line_break)
  rescue
     input || ''
  end
end

字符串
这样行吗?

input = input.encode('utf-8', :invalid => :replace, :undef => :replace, :replace => '_')

ddrv8njm

ddrv8njm1#

是的,这应该工作,它会取代任何奇怪的字符,不能转换成UTF-8与下划线。
在这里阅读更多关于在ruby中编码字符串的信息:
http://ruby-doc.org/core-1.9.3/String.html#method-i-encode

qc6wkl3g

qc6wkl3g2#

在字符串上使用force_encoding("UTF-8")方法对我很有效。

示例

这个例子使用了来自whois请求的随机数据(你可以自己尝试)。
这个错误对我来说:

# gem install whois

whois = Whois::Client.new
mystring = whois.lookup("google.com").to_s
puts mystring

# (irb):38:in `write': "\xE2" from ASCII-8BIT to UTF-8 
# (Encoding::UndefinedConversionError)

字符串
但这个管用!

whois = Whois::Client.new
mystring = whois.lookup("google.com").to_s
puts mystring.force_encoding("UTF-8")


关键的区别是在打印字符串之前调用force_encoding("UTF-8")
来自here

相关问题