2010-11-15 34 views
20

下面是測試程序,包括中國性狀:python:json.dumps無法處理utf-8?

# -*- coding: utf-8 -*- 
import json 

j = {"d":"中", "e":"a"} 
json = json.dumps(j, encoding="utf-8") 

print json 

下面是結果,看json.dumps轉換UTF-8到原來的數字!

{"e": "a", "d": "\u4e2d"} 

爲什麼這被打破?或者我錯了什麼?

+8

首先:__don't命名你的變種json__你將無法再後是訪問JSON lib下,其次沒有什麼是壞的,除了默認的json編碼是utf-8,所以你不必把它添加到dump()參數中。 – mouad 2010-11-15 12:09:00

+0

如果我可以接受它將二進制utf-8數據轉換爲「\ u4e2d」,我怎樣才能將它轉換回JavaScript中的二進制utf-8,這是客戶端接收這些數據? – 2010-11-15 12:12:29

+0

你有沒有嘗試過?,我的意思是把它發送到瀏覽器,我想如果你使用一個複雜的JavaScript庫,它會知道如何處理它。 – mouad 2010-11-15 12:24:10

回答

27

您應該閱讀json.org。完整的JSON規範位於右側的白色框中。

生成的JSON沒有任何問題。生成器允許生成UTF-8字符串或純ASCII字符串,其中字符使用\uXXXX表示法進行轉義。在你的情況下,Python json模塊決定轉義,並且具有逃脫符號\u4e2d。順便說一下:任何符合JSON的解釋器都會正確地使用這個順序,並讓你回到實際的字符。

58

看起來像我有效的JSON。如果你想讓json輸出一個非ASCII字符的字符串,那麼你需要通過ensure_ascii=False然後手動編碼。

+2

這是幫助我的答案! – borrrden 2012-07-31 02:57:26

+1

文檔:http://docs.python.org/2/library/json.html#basic-usage – 2013-02-08 05:58:27

5

使用simplejson與上面提到的選項:

# -*- coding: utf-8 -*- 
import simplejson as json 

j = {"d":"中", "e":"a"} 
json = json.dumps(j, ensure_ascii=False, encoding="utf-8") 

print json 

前前後後:

{"e": "a", "d": "中"}