Ruby 2.0.0字符串#匹配ArgumentError:UTF-8中的字节序列无效
-
21-12-2019 - |
题
我明白了很多,并没有想出优雅的解决方案。如果用户输入包含无效的字节序列,则需要能够使其不会引发异常。例如:
# @raw_response comes from user and contains invalid UTF-8
# for example: @raw_response = "\xBF"
regex.match(@raw_response)
ArgumentError: invalid byte sequence in UTF-8
.
已提出许多类似的问题,结果似乎是编码或强制编码字符串。然而,这两个工作都没有:
regex.match(@raw_response.force_encoding("UTF-8"))
ArgumentError: invalid byte sequence in UTF-8
.
或
regex.match(@raw_response.encode("UTF-8", :invalid=>:replace, :replace=>"?"))
ArgumentError: invalid byte sequence in UTF-8
.
是ruby 2.0.0的错误,或者我错过了什么?
是什么是奇怪的是它看起来正确编码,但匹配继续提高例外:
@raw_response.encode("UTF-8", :invalid=>:replace, :replace=>"?").encoding
=> #<Encoding:UTF-8>
. 解决方案
其他提示
自从您使用Rails而不仅仅是Ruby,您也可以使用 tidy_bytes。这与Ruby 2.0一起使用,也可能会给您回复明智的数据而不是只替换字符。
不隶属于 StackOverflow