在Rails控制台中出现Unicode问题,但在pry或irb中则没有

时间:2019-02-27 14:52:20

标签: ruby-on-rails unicode

我正在尝试查找并替换为ActiveRecord的某些数据库列中的内容â\u0080\u0099,但是Rails运行时和控制台似乎对该字符串有问题,误解了第一个字符。我在Rails控制台中看到了这一点,但在撬或“普通” irb中看不到。

当我将该字符串粘贴到Rails控制台中时,它将转换为\U+FFC3\U+FFA2\,然后在生成的字符串中将其忽略(见下文)。

我想了解:

  • 什么使Rails控制台在编码方面与irb / pry不同,以及在编码方面我如何使其表现相似
  • Rails如何能够首先将数据插入数据库中(出于我认为与控制台相同的原因,我在为此场景创建单元测试时遇到了问题

我正在使用rbenv在OS X Mojave上。我尝试了readlineenvironment variable解决方案,没有任何改变。

bin / rails控制台

Running via Spring preloader in process 99194
Loading development environment (Rails 5.2.2)
Cannot read termcap database;
using dumb terminal settings.
irb(main):001:0> RUBY_VERSION
=> "2.5.3"
irb(main):002:0> Encoding::default_internal
=> #<Encoding:UTF-8>
irb(main):004:0> s = '\U+FFC3\U+FFA2\u0080\u0099'
=> "\\u0080\\u0099"
irb(main):005:0> s = "\U+FFC3\U+FFA2\u0080\u0099"
=> "\u0080\u0099"

irb

irb(main):018:0> RUBY_VERSION
=> "2.5.3"
irb(main):019:0> s = 'â\u0080\u0099'
=> "â\\u0080\\u0099"

$ gem list | grep pry
pry (0.12.2)
$ pry
[1] pry(main)> RUBY_VERSION
=> "2.5.3"
[2] pry(main)> s = "â\u0080\u0099"
=> "â\u0080\u0099"

等等。

  • 我注意到Encoding::default_internal在Rails控制台中解析为#<Encoding:UTF-8>,但在irb和pry中解析为nil。在Rails控制台中将其设置为nil也不能解决我的问题。
  • 这些字符串最终在浏览器中显示为St. Patrickâs Day

0 个答案:

没有答案