我有一个问题,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]
任何帮助都是非常感谢的。
发布于 2017-07-24 20:32:24
只需使用UTF-8对正则表达式进行编码:
str = 'é'
arr = str.split(/x/mu)
#=> ["é"]
文档:https://ruby-doc.org/core-2.3.1/Regexp.html#class-Regexp-label-Encoding
https://stackoverflow.com/questions/45280578
复制相似问题