python中解决中文乱码
解決中文亂碼
- 什么是字符編碼
- python 的字符編碼
- encode和decode
- unicode還可以decode嗎?
- UTF-8還可以encode嗎?
- 解決中文編碼問題
- 問題1:使用requests獲取網站內容后,出現中文亂碼
- 問題2:非法字符拋出異常
- 問題3:網頁可能使用了gzip壓縮
- 問題4:讀取文件的中文亂碼
什么是字符編碼
總的來說,字符串的編碼都只有兩大類:
Unicode 被稱為統一碼、萬國碼或單一碼。它為每種語言中的每個字符設定了統一的并且唯一的二進制編碼。
為了節省空間,開發了一些中間格式的字符集。被稱為通用轉換格式UnicodeTransformation Format(UTF),常見的有 UTF?8 和 UTF?16。
隨著互聯網的普及,強烈要求出現一種統一的編碼方式, UTF?8 就是在互聯
網上使用最廣的一種Unicode的實現方式。 UTF?8 最大的一個特點是長度可變,它可以使用1一4個字節表示一個符號,英文字母通常被編為1個字節,漢字通常。被編為3個字節,如表 所示。
| A | 01000001 | 00000000 01000001 | 01000001 |
| 中 | 01001110 00101101 | 11100100 10111000 10101101 |
對于 UTF?8 編碼,怎么知道什么時候是1個字節,什么時候是3個字節呢?
其實, UTF?8 的編碼規則很簡單,只有兩條:
Unicode碼。因此對于英語字母。 UTF?8 編碼和ASCII碼是相同的。
python 的字符編碼
再python中字符的編碼使用str和bytes編碼兩種類型。
python3默認字符型編碼為Unicode,但python2則不是。
encode和decode
- encode作用是將Unicode轉化成的某種類型的編碼。
- decode作用是將其他編碼的字符串轉換成Unicode編碼。
unicode還可以decode嗎?
腦洞大開呀,答案是不可以的,unicode不可以再被解碼。
UTF-8還可以encode嗎?
答案是不可以直接解碼,可以節間。就是要先將UTF-8轉成Unicode,再進行encode
解決中文編碼問題
問題1:使用requests獲取網站內容后,出現中文亂碼
如r = requests.get(url)
可以先用r.encoding查看其對應的編碼格式,如果是gb2312
就加上r.encode ='gb2312'
問題2:非法字符拋出異常
當我們將某個字符串從GBK解碼為Unicode時,可以用
str.decode('GBK')如果報錯可以是一個頁面中有多中編碼,于是出現了非法字符。
可以使用ignore忽略掉
問題3:網頁可能使用了gzip壓縮
解決方法是:使用r.content會自動解碼gzip和deflate。
r = requests.get(url) after_gzip = r.content print(after_gzip.decode('UTF-8')問題4:讀取文件的中文亂碼
我們必須在讀取文件的時候聲明編碼格式。如
result_utf8 = open('test_utf8.txt','r',encoding='UTF-8').read() print(result_utf8)同理保存的時候也一樣
title = '我么' with open('title.txt','a+',encoding ='UTF-8') as f:f.write(title)f.close()總結
以上是生活随笔為你收集整理的python中解决中文乱码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线性表的应用之多项式的表示与相加
- 下一篇: 使用Python批量处理工作簿和工作表