Ruby Regex错误:不兼容的编码regexp匹配(ASCII-8BIT regexp与UTF-8字符串)

Shp*_*ord 23 ruby unicode encoding ruby-on-rails character-encoding

我有两个错误,都围绕编码和两个相关.

启动WEBrick时出现的第一个错误(技术上是警告):

/Users/USERNAME/example/config/initializers/bb-ruby.rb:54: warning: invalid Unicode Property \P: /\:\-?\P/
Run Code Online (Sandbox Code Playgroud)

它指的是: /\:\-?\P/,

它只是一些正则表达式,最终是这个块的一部分:

@@tags['Razzing'] = [
  /\:\-?\P/,
  '<img src="/assets/emoticons/razzing.png">',
  'Razzing',
  ':P',
  :razzing]
Run Code Online (Sandbox Code Playgroud)

然后,我在解析一些字符串时也会得到以下错误(可能是由于同一行)...

Encoding::CompatibilityError
incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string)
Run Code Online (Sandbox Code Playgroud)

我正在运行Ruby 1.9.2和Rails 3.2.1.

Fáb*_*sta 26

你的正则表达式被"编译"为ASCII-8BIT.

只需在声明Regex的文件顶部添加编码声明:

# encoding: utf-8
Run Code Online (Sandbox Code Playgroud)

而且你已经完成了.现在,当Ruby解析你的代码时,它会假设你使用的每个文字(Regex,String等)都是用UTF-8编码指定的.

更新: UTF-8现在是Ruby 2.0及更高版本的默认编码.

  • 在Ruby 1.9上改变了Regex引擎...我不知道你原来的'\ P`是什么意思,但现在它用来匹配Unicode代码点,它需要一个参数(比如`\ P {L}`,匹配任何非字母字符).见:http://www.regular-expressions.info/unicode.html (2认同)