tft每日頭條

 > 科技

 > python中将字符轉換為編碼值

python中将字符轉換為編碼值

科技 更新时间:2024-07-31 06:03:42

python中将字符轉換為編碼值(Python字符編碼轉換)1

關于字符的編碼,這是一個及其重要的知識點,這個點不搞清楚,那改bug有時候你會暈的。我們下面就以Python為例來說說字符編碼的問題。

我們常見的編碼格式有ASCII、gbk、GB2312、UTF-8、GB18030和Unicode等等。

說明一下:

  • ASCII 隻能表示英文和部分字符,占用1個字節

那問題來了,在我們中國,怎麼表示中文呢?于是就有了下面的三種編碼。

  • GB2312 中文編碼,好像隻能存7000多個漢字

  • GB18030 中文編碼,好像能存2萬多個漢字

  • GBK 中文編碼,基本上表示所有的漢字,windows系統默認的其實就是這個編碼。

那問題繼續來了,那每個國家都有自己的一套編碼,那不是買了他國的設備,顯示不出本國的字符了?

于是乎,就有了ISO标準的萬國碼-------Unicode。

  • Unicode :就是所謂的萬國碼。他能顯示全球各個地方的字符了。它1個中文字符或者一個英文字符占2字節。

要說這個Unicode好啊 ,都能存儲了,可是問題又來了,我本身英文的字符我是用ASCII編碼,隻占用8bit,現在用你的Unicode要占用16bit。這不是扯了蛋了。使用英文字符的就不願意了,要知道内存還是很貴的。這就出現了UTF-8。

  • UTF-8: 在Unicode的基礎上出現了這種編碼,UTF-8被稱作可變長編碼。可以認為是Unicode的一個擴展集,英文字符占用1個字節,中文占用3個字節。

有了這麼多種編碼,那麼編碼的轉換就是一個很必然的問題了。

字符編碼與轉換

看一個很重要的圖:

我們舉個例子,假如現在要把韓國的一個軟件運行在我們的機器上,假如這個軟件使用的是x編碼,我們知道不經過處理肯定是跑不起來的,這就需要一個轉碼的過程,這個過程是:x編碼------>Unicode------>GBK。必須要有這個過程。x編碼------>Unicode 這個過程一般稱為解碼(decode),Unicode------>GBK這個過程稱為編碼(encode)。反之,我們也需要這樣一個過程。總之,轉碼的過程Unicode成了一個橋梁,轉化成Unicode的過程一般稱為decode。

在我們的python3中所有的編碼都為utf-8。在python2中為ASCII。可使用該指令查詢:

python中将字符轉換為編碼值(Python字符編碼轉換)2

我們以python3x為例來說明一下:

python中将字符轉換為編碼值(Python字符編碼轉換)3

這是我的pycharm的界面,注意右下角的編碼格式為:UTF-8,這個表示我的這個程序使用的是UTF-8編碼。

而在左側輸出欄裡面的UTF-8表示的python3使用的默認編碼是UTF-8。

python中将字符轉換為編碼值(Python字符編碼轉換)4

我們把pycharm右下角的編碼格式改為GBK。

python中将字符轉換為編碼值(Python字符編碼轉換)5

寫個簡單的字符串,同志們報錯了啊。這是為啥呢?我們先改一下再看:

python中将字符轉換為編碼值(Python字符編碼轉換)6

第一張圖為啥報錯了呢?其實也很容易理解了,python3默認UTF-8編碼,你現在把你的python文件設置為GDK編碼,那肯定報錯啊。但是我要是在程序的前面,

  • # -*-coding:gbk -*-

我們聲明一下,我們使用gbk,程序就好了。這也是為啥我們在python2的時候開頭總有這個設置文件編碼的語句了。

那麼問題來了,這個s是什麼編碼呢?其實這個s還是unicode編碼。因為我們使用的是python3的解釋器,默認的還是unicode或者叫做utf-8。這個# -*-coding:gbk -*-隻是設置了你的文件的編碼格式。它和運行的時候毛的關系都沒有。這也是此時你不能再decode的原因了,我本身就是unicode,肯定就不能decode了。

  • 我們來對s這個字符串編碼一下:以gbk的格式啊

python中将字符轉換為編碼值(Python字符編碼轉換)7

是不是又有疑問了?gbk編碼竟然顯示不出來這個字符串了,什麼鬼?

其實這個是一個以byte類型編碼gbk,顯示不了這個字符串了。這個也是python3才有的。

在普及一下:Python 3對字符串和二進制數據流做了明确的區分。Unicode,由str類型表示,二進制數據則由bytes類型表示。Python 3不會以任意隐式的方式混用str和bytes,你不能拼接字符串和字節流,也無法在字節流裡搜索字符串(反之亦然),也不能将字符串傳入參數為字節流的函數(反之亦然)。

  • 以utf-8的格式編碼一下s

python中将字符轉換為編碼值(Python字符編碼轉換)8

依舊還是顯示不出來字符串,顯示的是以utf-8編碼的“我愛你”這個字符串。

  • 以gb2312的格式編碼一下s

python中将字符轉換為編碼值(Python字符編碼轉換)9

看看這個gb2312和gbk的編碼是不是一樣的,那是必然了,都是中文編碼嘛,可以認為gb2312是gbk的一個子集。

我們再來看看decode和encode的語法格式:

encode:後面跟的參數是我要編碼成的格式,例如:encode(“gbk”),表示我要編碼成gbk格式。

decode:後面跟的參數是我現在的格式,例如:decode(“gbk”)表示我要将gbk編碼的東西解碼成unicode。

  • 我們在轉回字符串,讓它顯示“我愛你”

python中将字符轉換為編碼值(Python字符編碼轉換)10

就說這麼多了,有啥問題歡迎大家留言交流

更多内容請關注頭條号:小5嵌入式

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved