mysql - 为什么 ActiveRecord 和/或 MySQL 对此字符有问题?

标签 mysql ruby activerecord utf-8 character-encoding

当我将从 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"
  1. 这是一个 utf8 字符吗?
  2. 我知道 ruby​​ 1.8 不支持编码,但说实话,我总是忘记这对我有何影响——我总是将所有其他层的所有内容设置为 utf8,一切都很好。为什么现在不起作用?

更新

更正——我错了,它不是来自 API,而是来自文件系统。

编码错误的字符来自房子内部!

新问题:How can I get utf8 characters from File#path

最佳答案

你以某种方式得到了 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/

相关文章:

PHP/MySQL 时区说明

php - 如何保存 Imagemagick 转换

Ruby 只列出我定义的局部变量

php - 使用 where、like 和 or_like CodeIgniter 3 Active Records 进行多重连接

ruby-on-rails - 使用 :if 验证

mysql - 如何获得 MySql 备份大小?

php - jQuery 自动完成菜单正在阻塞服务器

ruby - 在 Ruby 中将嵌套哈希键从 CamelCase 转换为 snake_case

c++ - 混合 Ruby 和其他语言的最佳方式是什么? (尤其是 C++)

mysql - 如何在 Rails 之外的 JRuby 脚本中使用 ActiveRecord?