我在rails 4中的web应用程序中遇到charset编码/解码问题。 我在我的网页上看到像“rappresentò”或“Ô这样的词,但我想看到“rappresentò”和“è”。
这是我的堆栈结构:
服务器Os:Ubuntu 14.04, MySQL的 数据库:“foo”, 表:“bar”
table description : |description | mediumtext | latin1_swedish_ci | YES |....
这是我在rails中的数据库配置
default: &default adapter: mysql2 encoding: latin1 pool: 5 username: root password: **** socket: ....在rails视图中
meta-charset is "ISO-8859-1"
注意: - 我只在服务器机器上反映了这个问题 - 当我通过ssh连接到数据库时,我正确地看到了字符
这是我在rails console中的输出:
Bar.find(38).description
Il volume è arricchito dalle illustrazioni di Jean-Jacques Sempé. "
答案 0 :(得分:0)
在我看来,终端的编码是ISO-8859-1
,对于重音e,字符串包含序列\xC3\xA8
。但是在ISO-8859-1中,你有这个:
\xC3 --> Ã
\xA8 --> ¨
而且,这就是您在ISO-8859-1终端中看到的输出。
在UTF-8
中,序列\xC3\xA8
碰巧代表一个字符:è
。因此,这意味着您在数据库中为\xC3\xA8
插入了UTF-8序列è
- 而不是ISO-8859-1
的{{1}}序列,即è
\xE8
因为UTF-8: è -> \xC3\xA8
ISO-8859-1: è -> \xE8
中的所有字符都由一个字节表示,并且因为序列ISO-8859-1
代表两个字节,这意味着任何\xC3\xA8
设备将把该序列解释为字符{ {1}},即ISO-8859-1
,后跟字符\xC3
,即Ã
。
不幸的是,您在数据库中插入的字符串是在\xA8
中编码的。因此,您应该首先将数据库的编码指定为¨
;或者您应该将字符串从UTF-8
转换为UTF-8
,然后再将它们插入数据库中:
UTF-8