当我将从 API 调用传入的某些字符串插入到我的数据库中时,它们会在某些字符处被截断。这是 ruby 1.8.7 的情况。我已将应用程序范围和 MySQL 中的所有内容设置为 utf8。我通常在应用程序其他部分的数据库中输入 utf8 内容时没有任何问题。
应该是“El Soldado y La Muñeca”。如果我将它插入到数据库中,只有这样才能使其进入:“11 El Soldado y La Mu”。
>> name => "11 El Soldado y La Mu?eca(1).mp3" >> name[20..20] => "u" >> name[21..21] => "\361" >> name[22..22] => "e"
- 这是一个 utf8 字符吗?
- 我知道 ruby 1.8 不支持编码,但说实话,我总是忘记这对我有何影响——我总是将所有其他层的所有内容设置为 utf8,一切都很好。为什么现在不起作用?
更新
更正——我错了,它不是来自 API,而是来自文件系统。
编码错误的字符来自房子内部!
最佳答案
你以某种方式得到了 Latin-1 (又名 ISO-8859-1)ñ
而不是 UTF-8 ñ
。在 Latin-1 中,ñ
是八进制的 361(因此是单字节 "\361"
)。在 UTF-8 中,小写波浪线 n 应该是 \303\261
(即八进制的字节 0303 和 0261 或十六进制的 0xc3 和 0xb1)。
您可能必须开始使用Iconv在 Ruby 端,以确保您获得 UTF-8 格式的所有内容。
关于mysql - 为什么 ActiveRecord 和/或 MySQL 对此字符有问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7266557/