JSON没有正确显示某些UTF-8字符

时间:2014-06-21 07:51:44

标签: mysql json symfony encoding utf-8

我在mysql db中有一个表。我无法控制那些表格内容。我检索的列被编码为UTF-8_danish_ci。数据由具有挪威字符串的字符串组成:å ø æ。通过mysql CLI访问数据时看起来正确。在symfony2项目中,当我使用doctrine ORM检索数据并尝试json_encode()时,我得到的错误是我发送给编码的数组的某些部分不是UTF-8。

我甚至制作了一个辅助方法,以确保在发送到编码之前将所有结果转换为UTF-8。在这种情况下,json有效,但显示?而不是å ø æ字符。

提前致谢。

2 个答案:

答案 0 :(得分:0)

出于一些非常奇怪的原因。显示JSON字符串时,它会显示那些转义的字符。当我将json字符串加载到jquery插件中以进行自动完成时,它正确地解析了这些转义字符。我的yml配置文件中有charset:utf8。不能真正说出为什么原始json逃脱字符并在html页面上正确显示它们。

答案 1 :(得分:-1)

听起来像是从MySQL检索数据的驱动程序的问题。确保charset是您的连接定义的一部分:

doctrine: dbal: default_connection: default connections: default: dbname: database driver: %database_driver% host: %database_host% port: %database_port% user: %database_user% password: %database_password% charset: utf8

这将导致Doctrine通过“mysql:host = $ host; dbname = $ db; charset = utf8”连接,显式请求utf8。 (顺便说一句,检查你的PDO版本.. 5.3.6之前的PDO不支持charset =由于某种原因; Doctrine在每次查询之前都使用了“SET NAMES”hack来尝试解决这个问题。如果你使用的是旧的在最新版本的Symfony中,这可能是一个问题。

如果它不是数据库驱动程序,那么您可能有双重编码的字符串和/或带有混合编码的字符串。看一下forceutf8库。