欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

徹底搞懂Python編碼-創(chuàng)新互聯(lián)

因為中文的特殊編碼,導(dǎo)致 Python2 和 Python3 使用過程中的各種編碼問題,如果不清楚其中的關(guān)聯(lián)關(guān)系,那么這就一直是個大坑,不是懵逼就還是懵逼,所以就目前碰到的情況徹底梳理下 Python2 和 Python3 中編碼的關(guān)系和區(qū)別,以作備忘。

創(chuàng)新互聯(lián)致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營銷,包括網(wǎng)站建設(shè)、網(wǎng)站制作、SEO優(yōu)化、網(wǎng)絡(luò)推廣、整站優(yōu)化營銷策劃推廣、電子商務(wù)、移動互聯(lián)網(wǎng)營銷等。創(chuàng)新互聯(lián)為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制及解決方案,創(chuàng)新互聯(lián)核心團(tuán)隊10年專注互聯(lián)網(wǎng)開發(fā),積累了豐富的網(wǎng)站經(jīng)驗,為廣大企業(yè)客戶提供一站式企業(yè)網(wǎng)站建設(shè)服務(wù),在網(wǎng)站建設(shè)行業(yè)內(nèi)樹立了良好口碑。

先說下涉及編碼格式的幾個地方:

  1. 腳本字符編碼:就是經(jīng)常在腳本文件開頭看到的 # -*- coding: utf-8 -*-,如果使用 Python2,沒有顯式聲明的話默認(rèn)使用 ASCII 格式,Python3 默認(rèn)使用 utf-8 格式;
  2. 解釋器字符編碼:可以通過函數(shù) sys.getdefaultencoding() 查看,Python2 默認(rèn)是 ASCII,Python3 默認(rèn)使用 utf-8;
  3. 腳本文件存儲編碼:就是 py 腳本文件本身在物理介質(zhì)上面的存儲格式,通常有 ASCII、GBK、utf-8 等格式。

下面我們把上述編碼分別在腳本中進(jìn)行組合使用后,再使用 Python2.6 和 Python3.4 運行,看看實際都什么效果。

1.默認(rèn)腳本文件編碼 + 文件存儲使用 gbk

腳本內(nèi)容:

import sys

print(sys.getdefaultencoding())
print('中文')

使用 Python2.6 運行的結(jié)果如下,提示gbk 編碼字符 \xd6 非 ASCII 字符:

> python26 test_gbk.py
  File "test_gbk.py", line 4
SyntaxError: Non-ASCII character '\xd6' in file test_gbk.py on line 4, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

使用 Python3.4 運行的結(jié)果如下,提示gbk 編碼字符 \xd6 非 utf-8 字符:

> python26 test_gbk.py
  File "test_gbk.py", line 4
SyntaxError: Non-UTF-8 code starting with '\xd6' in file test_gbk.py on line 4, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

結(jié)論:默認(rèn)的 gbk 編碼中文,Python2的解釋器字符編碼(ASCII)和 Python3的解釋器字符編碼(utf-8)格式都沒法識別,因為 ASCII 編碼不包含中文,而 utf-8 是 3 字節(jié)編碼,gbk 是 2 字節(jié)編碼,所以都識別不了了。

2.腳本文件編碼 gbk + 文件存儲使用 gbk

在剛才的腳本頭部顯式聲明腳本文件編碼格式為 gbk:

#coding:gbk

import sys

print(sys.getdefaultencoding())
print('中文')

使用 Python2.6 運行的結(jié)果:

> python26 test_gbk.py
ascii
中文

使用 Python3.4 運行的結(jié)果:

> python34 test_gbk.py
utf-8
中文

結(jié)論:文件使用的 gbk 格式存儲,同時顯式聲明了腳本文件編碼為 gbk,Python2 和 Python3 都可以正常處理。

3.腳本文件編碼 utf-8 + 文件存儲使用 gbk

在剛才的腳本頭部顯式聲明腳本文件編碼格式為 utf-8:

# -*- coding: utf-8 -*-

import sys

print(sys.getdefaultencoding())
print('中文')

使用 Python2.6 運行的結(jié)果正常:

> python26 test_gbk.py
ascii
中文

使用 Python3.4 運行的結(jié)果如下,提示嘗試使用 utf-8 解碼字符 0xd6 時異常:

> python34 test_gbk.py
File "test_gbk.py", line 6
SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xd6 in position 0: invalid continuation byte

結(jié)論:文件使用的 gbk 格式存儲,同時顯式聲明了腳本文件編碼為 utf-8時,但是 Python2 在 Windows 平臺還是使用 gbk 進(jìn)行輸出,所以解析正常,而 Python3 使用 utf-8 所以解析異常。

4.默認(rèn)腳本文件編碼 + 文件存儲使用 utf-8

去掉之前腳本頭部的聲明,然后使用 utf-8 格式存儲文件(注意,不能在剛才的文件基礎(chǔ)上強(qiáng)制修改存儲編碼,強(qiáng)制轉(zhuǎn)換會出現(xiàn)中文亂碼的問題,建議先新建一個 utf-8 格式的文件,然后再輸入中文):

import sys

print(sys.getdefaultencoding())
print('中文')

使用 Python2.6 運行的結(jié)果如下,ASCII 也識別不了 utf-8 格式的字符 \xe4

> python26 test.py
  File "test.py", line 4
SyntaxError: Non-ASCII character '\xe4' in file test.py on line 4, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

使用 Python3.4 運行的結(jié)果,可以正常識別,因為 Python3 默認(rèn)使用 utf-8 編碼:

> python34 test.py
utf-8
中文

結(jié)論:默認(rèn)的 utf-8 編碼中文,Python2 會默認(rèn)使用 ASCII 讀取,所以沒法識別,Python3 可以正常識別。

5.腳本文件編碼 gbk + 文件存儲使用 utf-8

腳本頭部顯式聲明腳本文件編碼格式為 gbk,同時使用 utf-8 格式存儲文件:

#coding:gbk
import sys

print(sys.getdefaultencoding())
print('中文')

使用 Python2.6 運行的結(jié)果如下,使用 gbk 根本讀取不了 utf-8 格式任何內(nèi)容:

> python26 test.py
File "test.py", line 6
SyntaxError: 'gbk' codec can't decode bytes in position 9-10: illegal multibyte sequence

使用 Python3.4 運行的結(jié)果如下,其實和上面錯誤一樣,但是提示更直接了:

> python34 test.py
File "test.py", line 1
SyntaxError: encoding problem: gbk

結(jié)論:默認(rèn)的 utf-8 編碼中文,如果顯式指定使用 gbk 讀取,Python2 和 Python3 都沒法做到。

6.腳本文件編碼 utf-8 + 文件存儲使用 utf-8

腳本頭部顯式聲明腳本文件編碼格式為 utf-8,同時使用 utf-8 格式存儲文件:

# -*- coding: utf-8 -*-
import sys

print(sys.getdefaultencoding())
print('中文')

使用 Python2.6 運行的結(jié)果如下,雖然讀取正確了,但是 Python2 在 Windows 系統(tǒng)會默認(rèn)使用 gbk 對中文進(jìn)行解碼,所以輸出亂碼:

> python26 test.py
ascii
涓枃

使用 Python3.4 運行的結(jié)果正常:

> python34 test.py
utf-8
中文

結(jié)論:雖然文件存儲編碼和腳本文件編碼都是 utf-8,但是 Windows 平臺上,Python2 會按 gbk 解析中文,所以會輸出亂碼,可以在中文前面加 u 來解決u'中文',或者顯式使用 utf-8 進(jìn)行一次 decode。

匯總下驗證結(jié)果,可以得到如下的表格:

不同組合下 Python3 和 Python2 處理結(jié)果 Python3 Python2
默認(rèn)腳本文件編碼 + 文件存儲使用 gbkSyntaxError,解析錯誤SyntaxError,解析錯誤
腳本文件編碼 gbk + 文件存儲使用 gbk正常輸出中文正常輸出中文
腳本文件編碼 utf-8 + 文件存儲使用 gbkSyntaxError,解析錯誤正常輸出中文
默認(rèn)腳本文件編碼 + 文件存儲 utf-8正常輸出中文SyntaxError,解析錯誤
腳本文件編碼 gbk + 文件存儲使用 utf-8SyntaxError,解析錯誤SyntaxError,編碼錯誤
腳本文件編碼 utf-8 + 文件存儲使用 utf-8正常輸出中文中文輸出亂碼
總結(jié)下結(jié)論:
  1. 如果使用 Python2 請一定要使用 gbk 格式存儲文件;
  2. 如果使用 Python2 盡可能使用 gbk 存儲文件且顯式聲明腳本文件編碼為 gbk,方便后續(xù)兼容 Python3;
  3. 如果使用 Python3 不管使用什么格式存儲文件,但請一定保證顯式聲明腳本文件編碼和存儲格式一致;
  4. 不管是使用 Python2 還是 Python3,保持顯式聲明腳本文件編碼的好習(xí)慣;
  5. 如果腳本有跨平臺需求,推薦使用 Python3 + 腳本文件編碼 utf-8 + utf-8 格式存儲文件的組合;

本文原創(chuàng)發(fā)布于公眾號「sylan215」,十年測試?yán)媳脑瓌?chuàng)干貨,關(guān)注我,漲姿勢!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)頁標(biāo)題:徹底搞懂Python編碼-創(chuàng)新互聯(lián)
本文路徑:http://aaarwkj.com/article22/ieecc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、關(guān)鍵詞優(yōu)化、面包屑導(dǎo)航、自適應(yīng)網(wǎng)站、企業(yè)網(wǎng)站制作品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管
国产不卡视频观看网站| 色哟哟免费在线观看视频| 蜜臀av午夜福利在线| 欧美日韩在线观看黄色| 女同久久精品国产精品天堂99| 亚洲成综合人在线播放| 国产又爽又乱的视频在线| 亚洲成av人在线观看福利| 黄色三级视频一区二区三区| 国产黄色一区二区三区| 久久婷婷av一区二区三区| 日本 午夜 在线 视频| 久青青国产综合自拍视频在线观看| 性色视频一区二区三区| 观看女性真实高潮的合集| 人妻少妇亚洲中文字幕| 日本人妻三级精品久久| 久久成人免费在线电影| 91九色在线精品人妻| 久久久精品在线免费视频| 色哟哟网站之中文字幕| 国产三级国产精品国产国在线观看| 九九视频免费观看5| 午夜性生活免费观看视频| 日本精品一区二区不卡| 日韩成年人高清精品不卡一区二区| 日本色电影一区二区三区| 国产视频不卡一区二区| 精品国产一区二区av麻豆| 欧美黄色影院在线观看| 久久人妻制服乱码中文字幕| 亚洲国产成人91精品| 日本黄色录像黄色录像| 蜜臀av一区二区高清| 91在线观看高清免费| 欧美日韩在线国产一区| 精品亚洲综合一区二区| 久久精品国产亚洲七七| 欧美日韩三级性生活水平| 99精品国产麻豆一区二区三区 | 亚洲欧美日韩精品二区|