Ruby:不兼容的编码正则表达式匹配



我遇到了Ruby拒绝拆分包含某个拉丁字符的字符串的问题(并且可能会与其他字符串有问题(。我知道有很多关于这个特定错误的帖子,但没有一个答案对我有用。

我已将问题归结为以下示例。下面是产生问题的整个脚本。脚本本身采用 UTF-8。

#!/usr/bin/ruby
str = 'é'
arr = str.split(/x/sm)

第二行中的那个字符是带有尖锐的拉丁小e。(是的,我知道因为字符串不包含"x",所以没有太多的拆分要做,这只是产生错误的一个例子。

这是错误消息,为了您的安全和舒适,自动换行:

./dev.rb:3:in `split': incompatible encoding regexp match
(Windows-31J regexp with UTF-8 string) (Encoding::CompatibilityError)
from ./dev.rb:3:in `<main>'

我尝试重新编码字符串无济于事。以下任何一行都无济于事:

str = str.force_encoding('iso-8859-1').encode('utf-8')

str = str.force_encoding(Encoding::UTF_8)

这是我正在使用的Ruby版本:

ruby 2.3.1p112 (2016-04-26) [x86_64-linux-gnu]

任何帮助,不胜感激。

只需用 UTF-8 对正则表达式进行编码:

str = 'é'
arr = str.split(/x/mu)
#=> ["é"]

文档:https://ruby-doc.org/core-2.3.1/Regexp.html#class-Regexp-label-Encoding

最新更新