最奇怪的错误,是谁应该挑战尝试帮助我?昨天花了几个小时,它就像魔术一样。我无法相信这种情况正在发生,这让我发疯了。
顺便说一句,使用:
Encoding.default_internal = Encoding.default_external = UTF-8
config.encoding = 'utf-8'
它与Postgres,ActiveRecord和Encodings有关! 事实证明,每当我们使用特殊字符在数据库上创建新用户时,我们就会收到这些错误:
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编码。这对我来说绝对没有意义!
(btw,first_name
,middle_name
,last_name
这些字段在数据库中与输出中列出的其他文本字段完全相同,但它们并不相同。得到任何特殊待遇。)
另一个有趣的事情是,如果我没有填写任何字段,则值的编码为UTF-8
。但是一旦我填写它,即使我不使用特殊字符,它也会转换为ASCII-8BIT
。
有什么建议吗?我尝试了所有的事情。
谢谢。
答案 0 :(得分:1)
好的,所以在我的情况下,它与gem crypt_keeper
有关。
如果您使用特殊的Unicode字符,例如´
,则必须明确告诉gem使用UTF-8进行编码,否则它会将数据库中的值存储为ASCII-8BIT。
希望我收到一条更好的错误消息,知道它是由于这个原因造成的,希望有一天有同样问题的人会看到这一天!