在py2中,有兩種字串型別:str型別和unicode型別;str和unicode分別存的是位元組資料(編碼不確定直譯器解釋)和unicode資料
python 2.7.10 (default, oct 6 2017, 22:29:07)type
"help
", "
", "
credits"or
"license
"for
more information.
>>> a='中國'
>>> printa中國
>>> print type(a) #
檢視型別為字串 str
'str
'>
>>> print repr(a) #
str 中預設存的是位元組資料,str 的編碼是通過直譯器解發布來的。指定了什麼解發布來就是啥編碼,預設acill
'\xe4\xb8\xad\xe5\x9b\xbd
'
py2的編碼(encode)和解碼(decode):是str 和 unicode 之間的轉換encode : unicode --> str , decode: str--> unicode
encode 是將unicode編碼的資料轉化成 指定編碼的字串str
decode 是將指定編碼的字串str 轉換為unicode
py3也有兩種資料型別:str和bytes; str型別存unicode編碼的資料,bytse型別存bytes資料,與py2比只是換了一下名字而已。
importjson
s='苑昊
'print(type(s)) #
print(json.dumps(s)) #
"\u82d1\u660a"
b=s.encode('
utf8')
print(type(b)) #
print(b) #
b'\xe8\x8b\x91\xe6\x98\x8a'
u=b.decode('
utf8')
print(type(u)) #
print(u) #
苑昊print(json.dumps(u)) #
"\u82d1\u660a"
print(len('
苑昊')) #
2
py3的編碼(encode)和解碼(decode):是str 和 bytes 之間的轉換encode : str --> bytes , decode: bytes--> str
encode 是將unicode編碼的str 字串轉化成 指定編碼的bytes
decode 是將指定編碼的bytes 轉換為unicode 編碼的str字串
檢視直譯器的預設編碼:
py2預設ascii碼,py3預設的utf8,可以通過如下方式查詢12
import
sys
print
(sys.getdefaultencoding())
py2直譯器要通過如下的指定,才會以utf8編碼去讀取檔案。 py3不需要預設就是utf8
#coding:utf8
(1)指定utf8
#a.py
#coding=utf8
import
sysprint
sys.getdefaultencoding()
a='中國
type(a),repr(a)
執行:
#python a.py
ascii
'str
'> '
\xe4\xb8\xad\xe5\x9b\xbd
'說明str 存的是utf8編碼的位元組
(2)指定gbk
#a.pyopen檔案如何告訴直譯器通過啥編碼開啟檔案? 解決encoding='utf8' 。python2 沒有這個引數,py3才有#coding=gbk
那麼str 存的是gbk編碼的位元組
python的字元編碼
1 字元編碼 將人類的字元編碼 轉換成計算機能識別的數字 這種轉換必須遵循一套固定的標準,該標準無非是 人類字元與數字的對應關係,稱之為字元編碼表 0001 1011 a 0000 0000 b 0000 0001 c 0000 0002 d 0000 0003 bit 二進位制位 bytes 位元...
Python 的字元編碼
配置 python 2.7 sublime text 2 os x 10.10 本文意在理清各種編碼的關係並以此解決 python 中的編碼問題。只有先了解字元表 編碼字符集 字元編碼三者的基本概念,才能直入編碼問題的核心。字元表是乙個系統支援的所有可讀或者可顯示的抽象字元的集合。也就是說字元表裡面...
python 的字元編碼
unicode編碼 unicode編碼為世界上所有字元都分配了乙個唯一編號,為十六進製制,如中文簡體漢字 渣 的 unicode編號就是 6e23,unicode僅僅定義了每個字元的編號,並沒有定義如何將這個編號進行儲存的方式,所以後來出現了utf 8,gbk等編碼格式,它們都是 unicode 的...