[TOC]
關鍵詞列表
python 亂碼
python utf8
python utf-8
python unicode
python 中文
python 轉碼
python dict 編碼
str 和 unicode
python 里字符串類型有兩種:
- str : 以utf8形式存儲的字符串
- unicode : 直接以unicode 形式存儲的字符串
這兩種相當于是對應兩個不同的類, 只是有一些方法可以實現相互轉換
str 類型
a='中'
len(a) = 3 , 表示 '中' 的 utf-8表示形式在內存里需要3字節(jié)
unicode 類型
a=u'中'
len(a) = 1 , 表示 一共有 1 個符號
str-->unicode
a='中'
a.decode('utf-8')
,
str 類型只能調用 decode, 不能調用 encode
unicode --> str
a=u'中'
a.encode('utf-8')
,
unicode 類型只能調用 encode, 不能調用 decode
dict 打印中文
怎樣才能讓 dict 類型序列化后的結果顯示中文字符, 而不是顯示 '\u4e2d' 或者 '\xae28\xa3b2'
>>> a={}
>>> a[1] = u'中'
>>> a
{1: u'\u4e2d'}
>>> print a
{1: u'\u4e2d'}
方法一:
import json
a={}
a[1] = u'中'
#b=json.dumps(a, ensure_ascii=False)
b=json.dumps(a, ensure_ascii=False)
print b
結果 ===> {"1": "中"}
<br />
方法二:
a={}
a[1] = u'中'
b=str(a) 或者 b = `a`
################
b=b.replace('u\'', '\'')
print b.decode('unicode-escape')
## 不能使用 print b.decode('utf-8')
結果 ==> {1: '中'}
list 打印中文
a=[]
a.append('中國')
b=str(a)
print b
####
結果 ==> ['\xe4\xb8\xad\xe5\x9b\xbd']
b=b.decode('string_escape')
print b
結果 ==> ['中國']
unicode --> unicode-escape
## unicode --> unicode-escape
>>> u'中文測試'.encode('unicode-escape')
'\\u4e2d\\u6587\\u6d4b\\u8bd5'
## unicode-escape --> unicode
>>> '\\u4e2d\\u6587\\u6d4b\\u8bd5'.decode('unicode-escape')
u'\u4e2d\u6587\u6d4b\u8bd5'