Ruby Mac OSX上Rails中的UTF-8

Ruby Mac OSX上Rails中的UTF-8,ruby,macos,encoding,Ruby,Macos,Encoding,我们最近遇到了在我们的一个模型中接受UTF-8字符的要求。我们设置字段以在数据库中使用正确的编码(mysql,在我的例子中是本地编码)。我们都运行MacOSX,并且有一个具有正确编码集的终端(据我所知) 目前我看到这种行为: 我的终端接受粘贴的UTF8字符。irb或rails控制台不支持 当将字段设置为在数据库中包含UTF8字符时,我可以调用Model.last并在rails控制台中看到这个字符。模型无效 在我同事的电脑上通过的测试运行得很好,在我的电脑上却失败了。测试以及模型文件的第一行有#

我们最近遇到了在我们的一个模型中接受UTF-8字符的要求。我们设置字段以在数据库中使用正确的编码(mysql,在我的例子中是本地编码)。我们都运行MacOSX,并且有一个具有正确编码集的终端(据我所知)

目前我看到这种行为:

  • 我的终端接受粘贴的UTF8字符。irb或rails控制台不支持
  • 当将字段设置为在数据库中包含UTF8字符时,我可以调用Model.last并在rails控制台中看到这个字符。模型无效
  • 在我同事的电脑上通过的测试运行得很好,在我的电脑上却失败了。测试以及模型文件的第一行有
    #编码:utf-8
  • 这是验证:
    验证:name的格式,使用:/^([[a-z]+]3,}$/
  • 测试使用允许和不允许的字符在数组上循环,检查结果是否有效。这些都失败了,没有明显的错误
  • 通过浏览器输入UTF8字符时,此验证也会失败
我现在不知道该去哪里找。欢迎提出任何意见

为了它的价值:

my.zshrc中有
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

2.0.0p0 :001 > Encoding.default_internal
 => #<Encoding:UTF-8> 
2.0.0p0 :002 > Encoding.default_external
 => #<Encoding:UTF-8> 



$> locale
LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
2.0.0p0:001>Encoding.default\u内部
=> # 
2.0.0p0:002>Encoding.default\u外部
=> # 
$>区域设置
LANG=“en_US.UTF-8”
LC_COLLATE=“en_US.UTF-8”
LC_CTYPE=“en_US.UTF-8”
LC_MESSAGES=“en_US.UTF-8”
LC_MONETARY=“en_US.UTF-8”
LC_NUMERIC=“en_US.UTF-8”
LC_TIME=“en_US.UTF-8”
LC_ALL=“en_US.UTF-8”
我们(主要是我的同事)设法找到了这一点。事实证明,在Ruby 2.0.0-p0中,我们在regexp中使用的\d实际上是位置敏感的

通过安装p195解决

我相信变更日志中提到了这一点(但我不确定正是这一变更解决了这一问题):


7972 Regexp POSIX空间类是位置敏感的。我不知道mariadb,但看看这里:我没有看到任何关于Unicode的提及。事实上,这意味着它没有得到适当的支持。您是如何设置您的开发数据库以支持unicode的?@NeilSlater我们已经将字符集和排序规则设置为UTF-8,就像在生产中和我的同事一样。当通过rails控制台直接获取数据库中的记录集时,我可以看到该特定字符。数据库中的查询工作正常,似乎是rails方面出了问题……有趣的细节:在发现错误的瞬间\d被删除。我们的意思是匹配0-9,而不是其他语言中的数字字符