我遇到的问题是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 I使用的版本:
ruby 2.3.1p112 (2016-04-26) [x86_64-linux-gnu]
感谢任何帮助。
答案 0 :(得分:2)
只需用UTF-8编码正则表达式:
str = 'é'
arr = str.split(/x/mu)
#=> ["é"]
文档:https://ruby-doc.org/core-2.3.1/Regexp.html#class-Regexp-label-Encoding