Python中的編碼和解碼問題


關於Python中遇到的中文字符串的讀取和輸入時總是遇到一堆問題,到現在還不是特別明白,只是有了一個大概率的理解,就是:字符串是用什么編碼格式編碼的,就用什么編碼格式來解碼。

encode()對字符串st進行編碼,按照制定的編碼格式編碼。編碼后為字節流,bytes。編碼是從中間編碼格式Unicode來向其他編碼格式來映射的,而Unicode的表示就是字符串str。可以直接對字符串編碼。

>>>a='你好'
>>>ae=a.encode('utf-8')
>>>ae
b'\xe4\xbd\xa0\xe5\xa5\xbd'
>>>type(ae)
bytes

decode()對編碼后的字節流進行解碼,按照編碼的格式進行解碼,解碼為中間格式Unicode,並且由str類型進行表示。比如上面的例子,下面解碼必須要以編碼相同的格式解碼‘utf-8’,否則會報錯。

>>>au=ae.decode('utf-8')
>>>au
'你好'
>>>ae.decode('gbk')
 '浣犲ソ'

如果用str的字符串來解碼會出現錯誤,因為str字符串表示的是Unicode,Python本身默認的編碼格式就是Unicode,所以str可以編碼

>>>a.decode('utf-8')
Traceback (most recent call last):
  File "G:\softs\Anaconda\lib\site-packages\IPython\core\interactiveshell.py", line 2963, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-68-fe89aebaa52b>", line 1, in <module>
    a.decode('utf-8')
AttributeError: 'str' object has no attribute 'decode'

下面推薦介個看的鏈接:

1.python3大作戰之encode與decode講解

2.python中的encode()和decode()函數

 

當遇到顯示為'\u534e\u4e3a\u624b\u673a\uff0c\u597d'的字符串時,表明這個字符串已經是Unicode編碼的格式了,所以可以直接先編碼為一個格式,再解碼,就可以看到能看得懂的中文字符串了

>>>s1='\u534e\u4e3a\u624b\u673a\uff0c\u597d\u7528\u4e0d\u8d35\uff0c\u5988\u5988\u518d\u4e5f\u4e0d\u7528\u62c5\u5fc3\u6211\u53d8\u6210\u6708\u5149\u65cf\u4e86~'
>>>s1.encode('utf-8').decode('utf-8')
'華為手機,好用不貴,媽媽再也不用擔心我變成月光族了~'
>>>type(s1)
 str

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM