0

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

目前我看到这种行为:

  • 我的终端接受粘贴的 UTF8 字符。irb 或 rails 控制台没有
  • 将字段设置为在数据库中包含 UTF8 字符时,我可以调用 Model.last 并在 rails 控制台中看到这个字符。模型无效。
  • 在我同事的计算机上通过的测试运行良好,但在我的计算机上却失败了。测试以及模型文件# encoding: utf-8在第一行
  • 这是验证:validates_format_of :name, with: /^([[ßàáâãóôþüúðæåïçèõöÿýòäœêëìíøùîûñé]\d[a-z]-]+){3,}$/
  • 测试在包含允许和不允许字符的数组上循环,检查结果是否有效。这些都失败了,没有明显的错误
  • 通过浏览器输入 UTF8 字符时,此验证也会失败

我目前不知道在哪里看。任何想法表示赞赏。

物有所值:

export LC_ALL=en_US.UTF-8并且export LANG=en_US.UTF-8存在于我的 .zshrc

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"
4

1 回答 1

0

我们(主要是我的同事)设法追踪到了这一点。事实证明,我们在正则表达式中使用的 \d 实际上在 Ruby 2.0.0-p0 中是位置敏感的

安装p195解决

我相信更改日志中提到了这一点(但我不确定是否正是这个更改解决了它):

http://www.ruby-lang.org/en/news/2013/05/14/ruby-2-0-0-p195-is-released/

7972 Regexp POSIX 空间类对位置敏感。

于 2013-05-23T08:36:35.417 回答