这让我很难过。我正在将一个相当大的应用程序(对我而言)从Rails 2.3升级到Rails 3.0。我也在Ruby 1.9.2中运行这个应用程序而不是之前的1.8.7。最重要的是,我也转而使用HTML5。因此有很多变数在起作用。
在几个页面中,来自MySQL数据库的文本不再显示正确。这可以像欧元符号(€)一样简单,也可以像一些梵语文本那样深奥:सर्वम्मंगलम्
虽然旧网站上的一切看起来都很棒,但现在我得到了一些垃圾字符,例如,Ǩ而不是欧元符号或以下内容:
सर्वम् मंगलम्
...而不是梵语文本。
数据库中的数据保持不变。据我所知,所有地方都设置了utf-8。
是什么给出了?
编辑1跟随Roland的帮助:
以下是我在ubuntu服务器的MySQL数据库上的内容:
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
但这是我在本地mac上运行命令所得到的:
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+------------------------------------------------------+
| Variable_name | Value |
+--------------------------+------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/Cellar/mysql/5.5.14/share/mysql/charsets/ |
+--------------------------+------------------------------------------------------+
第二个列表对我来说看起来更好(谁不太了解编码)。
我应该修改服务器数据库的设置吗?这不会搞乱他们现有的数据吗?如果是这样,我该如何改变char。设置变量?
答案 0 :(得分:5)
当您将给定字符串解释为Unicode时,将其作为UTF-8保存到字节流,然后将字节流转换为MacRoman,您将获得正确的字节。这些是UTF-8编码的字符串。
我这样做了(在UTF-8终端):
$ echo 'सर्वम् मंगलम्' > in
$ iconv -f UTF-8 -t MacRoman < in
सर्वम् मंगलम्
所以在某个地方,对数据进行相反的转换。字节流被解释为在 MacRoman 中,然后再次转换为UTF-8。