我通過網絡服務獲取以下單詞: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