【发布时间】:2015-09-30 09:38:19
【问题描述】:
最奇怪的错误,谁愿意挑战来帮助我?昨天花了几个小时在上面,这就像魔术一样。我不敢相信这会发生,这让我发疯。
顺便说一句,使用:
- Rails 4.2.3
- Ruby 2.2.3
- 第 0.18 页
Encoding.default_internal = Encoding.default_external = UTF-8config.encoding = 'utf-8'
它与 Postgres、ActiveRecord 和编码有关! 事实证明,每当我们在数据库上使用特殊字符创建新用户时,我们都会遇到这些错误:
Encoding::UndefinedConversionError: "\xC3" from ASCII-8BIT to UTF-8
\xC3 可能因字符而异。奇怪的是,我们从一开始就将一切都设置为 UTF-8。所以这真的没有意义,我深入研究了它,并使用了这个脚本:
User.all.each do
|user| user.attributes.each do
|name, value| if value.is_a? String
puts user.email + name.encoding.to_s + value.encoding.to_s
end
end
end
这是其中一位用户的输出,但所有用户都得到相同的结果:
dr_lottahelp@blahblah.comUTF-8UTF-8
dr_lottahelp@blahblah.comUTF-8ASCII-8BIT
dr_lottahelp@blahblah.comUTF-8ASCII-8BIT
dr_lottahelp@blahblah.comUTF-8ASCII-8BIT
dr_lottahelp@blahblah.comUTF-8UTF-8
dr_lottahelp@blahblah.comUTF-8UTF-8
dr_lottahelp@blahblah.comUTF-8UTF-8
dr_lottahelp@blahblah.comUTF-8UTF-8
dr_lottahelp@blahblah.comUTF-8UTF-8
dr_lottahelp@blahblah.comUTF-8UTF-8
dr_lottahelp@blahblah.comUTF-8UTF-8
原来只有 3 个字段获得 ASCII-8BIT 编码。这对我来说绝对没有意义!
(顺便说一句,first_name、middle_name、last_name 这些字段在数据库中与输出中列出的其他文本字段完全相同,它们没有得到任何特殊处理)。
另一个有趣的事情是,如果我不填写任何这些字段,则该值的编码为UTF-8。但是一旦我填写它,即使我不使用特殊字符,它也会被转换为ASCII-8BIT。
有什么建议吗?我已经尝试了每一件事。
谢谢。
【问题讨论】:
标签: ruby-on-rails ruby postgresql activerecord encoding