2011-09-01 25 views
0

当我从API调用中插入某些字符串到我的数据库时,它们会在某些字符处被截断。这与红宝石1.8.7。我已将所有设置设置为utf8应用程序范围并在MySQL中。我通常在应用程序的其他部分将utf8内容输入数据库时​​没有任何问题。为什么ActiveRecord和/或MySQL对这个角色有问题?

它应该是“El Soldado y LaMuñ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. 我知道,红宝石1.8不是编码感知,但说实话,我总是忘记这应该如何影响我 - 我总是把所有其他层的一切设置为UTF8,一切都很好。为什么现在不工作?

更新

CORRECTION--我错了,它不是从API的到来,它从文件系统中来。

错误编码的字符来自屋内

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

+0

我不是一个Ruby人,所以这可能是一个愚蠢的建议,但*连接*编码也设置为UTF-8?我认为它在每个平台的默认为ISO-8859-1 –

+0

是的,连接设置为utf8太 –

+0

看到我的新问题... http://stackoverflow.com/questions/7266815/how-can-i-get -utf8-characters-from-filepath –

回答

2

你以某种方式得到一个Latin-1(AKA ISO-8859-1)ñ,而不是一个UTF-8 ñ。在Latin-1中,ñ是八进制数361(因此,您的单个字节为"\361")。在UTF-8中,小写字母tilde-n应该是\303\261(即八进制字节0303和0261或十六进制0xc3和0xb1)。

您可能必须在Ruby端开始玩Iconv,以确保您以UTF-8获得所有内容。

+0

啊,所以361是*八进制*。我在想。 +1 –

+0

好吧,我一直在问错误的问题(再次)。看到上面的更新和这个新的问题:http://stackoverflow.com/questions/7266815/how-can-i-get-utf8-characters-from-filepath –

+0

@Pekka:你在正确的轨道与ISO- 8859-1。任何以“3”开头的字节都会让我想起八进制,但我必须查看Latin-1表。 –