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

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

我在启动WEBrick时遇到的第一个错误(技术上是警告):

/Users/USERNAME/example/config/initializers/bb-ruby.rb:54: warning: invalid Unicode Property \P: /\:\-?\P/ 

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

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

 @@tags['Razzing'] = [ /\:\-?\P/, '', 'Razzing', ':P', :razzing] 

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

 Encoding::CompatibilityError incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string) 

我正在运行Ruby 1.9.2和Rails 3.2.1。

您的正则表达式被“编译”为ASCII-8BIT。

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

 # encoding: utf-8 

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

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

Ruby 2.0文档

 /Pattern/u - stand for UTF-8