9Python全棧之路系列之Win字元編碼深解

2021-09-20 14:43:22 字數 3277 閱讀 6178

python2.7預設字元編碼是ascii格式,即使指定字元編碼為utf-8也未必能夠輸出中文,測試如下:

1

2

3

4

5

#_*_coding:utf-8_*_

# 定義乙個變數內容為中文,字符集為utf-8

temp="中文"

# 輸出變數temp的內容

print(temp)

用win下的dos視窗執行這個指令碼,看看輸出出來的是否為中文

c:\users\anshe>python f:\python_code\sublime\day02\print.py

涓枃        #輸出出來的是亂碼

這是為什麼呢?其實是因為dos視窗的字元編碼是gbk的(如下圖),規定輸出的字符集必須是gbk的,所以輸出出來的中文即為亂碼。

注意我是用的是python2.7.11

12

c:\users\anshe>python-v

python2.7.11

使用pycharm或者sublimepython ide輸出中文流程

流程中文說明:

py scripts頭部指定編碼格式為utf-8—>ide把預設的ascii格式編碼成utf-8—->ide終端輸出中文

1

2

3

4

5

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

# 定義乙個變數內容為中文,字符集為utf-8

temp="中文"

# 輸出變數temp的內容

print(temp)

輸出的內容:

既然這樣,python的編碼能夠把ascii編碼還換成utf-8那麼肯定也就可以轉換成gbk編碼,流程如下:

**如下:

1

2

3

4

5

6

7

8

9

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

# 定義乙個變數內容為中文,字符集為utf-8

temp="中文"

# 解碼,需要指定原來是什麼編碼

temp_unicode=temp.decode("utf-8")

# 編碼,需要指定要轉換成什麼編碼

temp_gbk=temp_unicode.encode("gbk")

# 輸出轉換成的gbk編碼

print(temp_gbk)

dos視窗執行測試:

1

2

c:\users\anshe>python f:\python_code\sublime\day02\print.py

中文

另外一種方法:

**:1

2

3

4

5

6

7

8

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

# 定義乙個變數內容為中文,字符集為utf-8

temp="中文"

# 解碼,需要指定原來是什麼編碼

temp_unicode=temp.decode("utf-8")

# 輸出轉換成的gbk編碼

print(temp_unicode)

# windows終端需要gbk,dos自動轉換成gbk

c:\users\anshe>python f:\python_code\sublime\day02\print.py

中文

大概流程也就像下面的圖一樣

python3移除了unicode字符集的型別,預設使用utf-8,還有一種也可以在dos終端輸出中文的方法,**如下:

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

print(u"中文")

dos視窗輸出的就是中文了,雖然我也不知道是什麼意思

1

2

c:\users\anshe>python f:\python_code\sublime\day02\print.py

Python全棧之路系列之元組資料型別

元組 tuple 和列表的唯一區別就是列表可以更改,元組不可以更改,其他功能與列表一樣 建立元組的兩種方法 第一種ages 11,22,33,44,55 第二種 ages tuple 11,22,33,44,55 如果元祖內只有乙個元素,那麼需要加上乙個逗號,否則就變成字串了。in 1 t 1 in...

Python全棧之路系列之賦值與運算子

在繼續下面的文章之前我們先來瀏覽一下python為我們提供的幾種運算子,定義兩個變數,分別是a和b,a的值是10,b的值是20。運算子描述例項 加,兩個物件相加 a b 30 減,兩個物件相減,可能會得到負數 a b 10 乘,兩數相稱或是返回乙個被重複若干次的字串 a b 200 除,兩個物件相除...

python全棧之路系列之賦值與運算子

在繼續下面的文章之前我們先來瀏覽一下python為我們提供的幾種運算子,定義兩個變數,分別是a和b,a的值是10,b的值是20。運算子描述例項 加,兩個物件相加 a b 30 減,兩個物件相減,可能會得到負數 a b 10 乘,兩數相稱或是返回乙個被重複若干次的字串 a b 200 除,兩個物件相除...