我通过网络服务获取以下单词:André如何将来自Web服务的重音字符存储到数据库中?
从Python中,该值看起来像:“Andr \ u00c3 \ u00a9”。然后,输入用json.loads
解码:
>>> import json
>>> json.loads('{"name":"Andr\\u00c3\\u00a9"}')
>>> {u'name': u'Andr\xc3\xa9'}
当我存储上述在UTF8 MySQL数据库,数据被存储像下面使用Django:
SomeObject.objects.create(name=u'Andr\xc3\xa9')
从一个MySQL查询名称列壳或在网页中显示它给: André
该网页显示在UTF8:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
我的数据库是UTF8配置:
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_unicode_ci |
| collation_server | utf8_unicode_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)
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/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
我怎样才能检索词安德烈从web服务,妥善保存它而不会丢失数据数据库,并在其原有的网页上显示它形成?
到目前为止,我在这里看不到任何问题。您从Python中看到的是您的字符串“André”的Unicode表示形式。每个字符都以两个字节存储。当您将其存储在MySQL中时,数据库引擎会自动将其转换为UTF-8编码。在UTF-8中,一些字符仅使用1个字节存储,而其他字符则使用多个字节,但这里没有数据丢失,原始字符串可以随时从UTF-8编码表示中获得。 – 2010-05-05 18:28:33
虽然不是100%与您的技术堆栈相同,但请查看http://stackoverflow.com/questions/279170/utf-8-all-the-way-through以获得无损处理utf-8的好解释所有的层次。 – ataylor 2010-05-05 19:05:18
@Tamas:WRONG;看看'u'Andr \ xc3 \ xa9''; e-acute占用4个字节;请参阅@ Bernd的回答 – 2010-05-05 23:51:57