如圖:
p =
"\u65e0\u6cd5\u8bc6\u522b\u5c5e\u6027\u201cphysical_network, network_type\u201d"
print p.encode(
'utf-8'
).decode(
'unicode_escape')》
無法識別屬性「physical_network, network_type」
p ="\u65e0\u6cd5\u8bc6\u522b\u5c5e\u6027\u201cphysical_network, network_type\u201d"
p2 =
"\u8d26\u6237\u8bbe\u5907"
print p2.decode(
'unicode_escape'
).encode(
'utf-8'
)print p.decode(
'unicode_escape'
).encode(
'utf-8'
)# 將字串p 不管之前什麼格式,先解碼成python內部的unicode編碼集,讀取檔案時再反向轉成原格式,然後再進行utf-8 編碼
print p2.decode(
'unicode_escape'
).encode(
'utf-8'
)print p.encode(
'utf-8'
).decode(
'unicode_escape'
)# 將字串p 編碼成utf-8格式,再進行碼成python內部的unicode編碼集,讀取檔案時再反向轉成原格式utf-8.
print p.decode(
'unicode_escape'
)print
isinstance
(p2,
unicode
)賬戶裝置
無法識別屬性「physical_network, network_type」
賬戶裝置
無法識別屬性「physical_network, network_type」
無法識別屬性「physical_network, network_type」
false
unicode_escape編碼集,將unicode記憶體編碼值直接儲存.
也就是說,將unicode記憶體編碼值進行儲存,讀取檔案時,再反向轉換回來
在python中,unicode是記憶體編碼集,一般我們將資料儲存到檔案時,需要將資料先編碼為其他編碼集,比如utf-8、gbk等
如圖中例子的兩處說明:將字串p 不管之前什麼格式,先解碼成python內部的unicode編碼集,讀取檔案時再反向轉成原格式,然後再進行utf-8 編碼
將字串p 編碼成utf-8格式,再進行碼成python內部的unicode編碼集,讀取檔案時再反向轉成原格式utf-8.
所以最後 這兩個雖然encode和decode 換了位置,但輸出結果相同
位元組串是給計算機看的, unicode是給人看的,做資料傳輸時,先encode
編碼成位元組串,進行傳輸,當我們拿到後,需要decode解嗎成unicode
進行操作
pp =
"你好,這個世界"
ppp = json.dumps(pp)
print ppp
》"\u4f60\u597d\uff0c\u8fd9\u4e2a\u4e16\u754c"
#decode(『utf-8』) 把 utf-8 轉化為 unicode 編碼
#encode(『utf-8』) 把 unicode 轉化為 utf-8 編碼
encode:編碼
decode:解碼
python內部編碼方式為unicode,decode將其他編碼方式轉換成unicode編碼方式,encode將unicode轉換成其他編碼方式。
因此unicode相當於乙個中**(1
)decode-
>
unicode
->encode (2
)encode-
>
unicode
->decode
3. decode和encode的區別
為什麼會出現亂碼呢?因為在檔案存的時候格式和讀取時候格式不一致就會亂碼了。
字串在python內部的表示是unicode編碼,也可以說現在的記憶體是unicode編碼格式,硬碟是utf-8。平常的資料操作都是先把資料讀取到記憶體中,所以記憶體中都是unicode編碼格式。所以我們平常在做編碼轉換時候,通常用unicode作為中間編碼。先將其他編碼的字串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼格式。
decode的作用是將二進位制資料解碼成unicode編碼,如str1.decode(『utf-8』),表示將utf-8的編碼字串解碼成unicode編碼。
簡單的來說:decode就是把二進位制資料(bytes)轉化**看的懂得英文或者漢字(decode用的比較多)encode的作用是將unicode編碼的字串編碼成二進位制資料,如str2.encode(『utf-8』),表示將unicode編碼的字串編碼成utf-8。
因此,轉碼的時候一定要先搞明白,字串str是什麼編碼,然後decode成unicode,然後再encode成其他編碼
**中字串的預設編碼與**檔案本身的編碼一致。
如:s=『中文』如果字串是這樣定義:s=u』中文』如果是在utf8的檔案中,該字串就是utf8編碼,如果是在gb2312的檔案中,則其編碼為gb2312。這種情況下,要進行編碼轉換,都需要先用decode方法將其轉換成unicode編碼,再使用encode方法將其轉換成其他編碼。通常,在沒有指定特定的編碼方式時,都是使用的系統預設編碼建立的**檔案。
則該字串的編碼就被指定為unicode了,即python的內部編碼,而與**檔案本身的編碼無關。因此,對於這種情況做編碼轉換,只需要直接使用encode方法將其轉換成指定編碼即可。
如果乙個字串已經是unicode了,再進行解碼則將出錯,因此通常要對其編碼方式是否為unicode進行判斷:
isinstance(s,unicode) #用來判斷是否為unicode
用非unicode編碼形式的str來encode會報錯
python Unicode 編碼問題
今天在用python寫分頁 傳入兩個引數 page num,page size,報錯了 我用的是python2.7 列印變數型別是unicode 所以要把unicode 轉成 int 提供兩種方法,都是先轉成字串,再轉成int page num int filter str.isdigit,page...
python unicode 編碼整理
unicode 只定義字元對應的數字,但沒有規定這些數字如何儲存起來,比如像中文的 我 字儲存時需要兩個位元組來表示,而英文本母a卻只需要乙個位元組,有些其他的字元可能需要3 4個位元組。utf 8 是對 unicode 編碼儲存的一種實現方式,同樣的還有 utf 16,utf 32。utf 8 是...
python unicode編碼轉換
python unicode編碼轉換 chr 20000 北 ord 函式主要用來返回對應字元的ascii碼,chr 主要用來表示ascii碼對應的字元他的輸入時數字,可以用十進位制,也可以用十六進製制。print ord a 97print chr 97 aprint chr 0x61 a乙個簡單...