我在生产环境中有一个文件,但我无法访问。当使用Ruby脚本加载该文件时,对其内容执行正则表达式会出现“ArgumentError => invalid byte sequence in UTF-8”的错误。
我相信我可以根据此处所有要点的答案进行修复:ruby 1.9: invalid byte sequence in UTF-8。请注意保留HTML标记。
或者,
我相信我可以根据此处所有要点的答案进行修复:ruby 1.9: invalid byte sequence in UTF-8。请注意保留HTML标记。
# Remove all invalid and undefined characters in the given string
# (ruby 1.9.3)
def safe_str str
# edited based on matt's comment (thanks matt)
s = str.encode('utf-16', 'utf-8', invalid: :replace, undef: :replace, replace: '')
s.encode!('utf-8', 'utf-16')
end
然而,我现在想要构建我的rspec来验证代码是否有效。我无法访问导致问题的文件,因此我想通过程序创建一个带有错误编码的字符串。
我尝试了各种变化,例如:
bad_str = (100..1000).to_a.inject('') {|s,c| s << c; s}
bad_str.length.should > safe_str(bad_str).length
或者,
bad_str = (100..1000).to_a.pack(c*)
bad_str.length.should > safe_str(bad_str).length
但长度总是相同的。我也尝试了不同的字符范围,而不总是100到1000。
有没有建议在Ruby 1.9.3脚本中构建具有无效编码的字符串?
safe_str
没有捕获到它。 - Hew Wolff