首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ruby:不兼容的编码regexp匹配

Ruby:不兼容的编码regexp匹配
EN

Stack Overflow用户
提问于 2017-07-24 20:24:09
回答 1查看 1.7K关注 0票数 2

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

我把这个问题归结为下面的例子。下面是产生问题的整个脚本。脚本本身是UTF-8格式的。

代码语言:javascript
运行
复制
#!/usr/bin/ruby
str = 'é'
arr = str.split(/x/sm)

第二行中的那个字符是拉丁文小写e,带有一个锐音字母。(是的,我知道因为字符串不包含'x‘,所以不需要做太多拆分,这只是一个产生错误的示例。)

以下是错误消息,为了您的安全和舒适性,请用文字包装:

代码语言:javascript
运行
复制
./dev.rb:3:in `split': incompatible encoding regexp match
(Windows-31J regexp with UTF-8 string) (Encoding::CompatibilityError)
    from ./dev.rb:3:in `<main>'

我尝试对字符串进行重新编码,但无济于事。以下两行都没有帮助:

代码语言:javascript
运行
复制
str = str.force_encoding('iso-8859-1').encode('utf-8')

代码语言:javascript
运行
复制
str = str.force_encoding(Encoding::UTF_8)

下面是我正在使用的Ruby版本:

代码语言:javascript
运行
复制
ruby 2.3.1p112 (2016-04-26) [x86_64-linux-gnu]

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-24 20:32:24

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

代码语言:javascript
运行
复制
str = 'é'
arr = str.split(/x/mu)
#=> ["é"]

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45280578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档