當前位置:首頁 » 編程語言 » python編碼解碼

python編碼解碼

發布時間: 2022-12-09 17:02:59

python有哪幾種編碼方式

第一種:ASCII碼。是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言,它是現今最通用的單位元組編碼系統,並等同於國際標准IS/IEC
646。
由於計算機是美國人發明的,因此,最早只有127個字母被編碼到計算機李,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母a的編碼是97,後128個稱為擴展ASCII碼。
第二種:GBK和GB2312。能在計算機中顯示中文字元是至關重要的,然而ASCII表裡一個偏旁部首都沒有,所以我們需要一個關於中文和數字對應的關系表,一個位元組只能最多表示256個字元,用處理中文顯然一個位元組是不夠的,所以我們需要採用兩個位元組來表示,所以中國制定了GB2312編碼,用來將中文編寫進去。
第三種:Unicode。因為各個國家都有一套自己的編碼,所以無法避免沖突,因此Unicode誕生了。它可以把所有語言都統一到一套編碼里,這樣就不會存在亂碼問題了,現代操作系統和大多數編程語言都直接支持Unicode。
第四種:UFT-8。基於節約的原則,出現了把Unicode編碼轉化為可變長編碼的UTF-8編碼。而UTF-8編碼把一個Unicode字元根據不同的數字大小編碼成1-6個位元組,常用的英文字母被編碼成一個位元組,漢字通常是3個位元組,只有很生僻的字元才會被編碼成4-6個位元組,如果你要傳輸的文本包含大量英文字元,用UTF-8編碼就能節省空間。

Ⅱ Python怎麼能簡單實現Base64編碼和解碼

Base64編碼是一種「防君子不防小人」的編碼方式。廣泛應用於MIME協議,作為電子郵件的傳輸編碼,生成的編碼可逆,後一兩位可能有「=」,生成的編碼都是ascii字元。
優點:速度快,ascii字元,肉眼不可理解
缺點:編碼比較長,非常容易被破解,僅適用於加密非關鍵信息的場合
Python Base64編碼和解碼示例:
>>> import base64
>>> s = '我是字元串'
>>> a = base64.b64encode(s)
>>> print a
ztLKx9fWt/u0rg==
>>> print base64.b64decode(a)
我是字元串

Ⅲ python遇到『\u』開頭的unicode編碼

web信息中常會遇到「\u4f60\u597d」類型的字元。首先』\u『開頭就基本表明是跟unicode編碼相關的,「\u」後的16進制字元串是相應漢字的utf-16編碼。python里decode()和encode()為我們提供了解碼和編碼的方法。其中decode('unicode_escape')能將此種字元串解碼為unicode字元串。

比如:

有篇講python編碼的文章比較好, http://blog.csdn.net/liuxincumt/article/details/8183391

Ⅳ Python編碼字元串解碼問題,怎麼解決

在將字元串寫入文件時,執行f.write(str),後台總是報錯:UnicodeEncodeError: 'ascii' codec can't encode character u'\u6211' in position 0: ordinal not in range(128),即ascii碼無法被轉換成unicode碼。
剛開始我以為Python默認的編碼是utf-8,所以使用decode方法和encode方法來進行編碼轉換,後來怎麼也不成功,於是懷疑是否默認編碼不是utf-8。
使用下面語句獲取python當前的默認編碼:
[python] view plain
import sys
print sys.getdefaultencoding()

Ⅳ python url 編碼解碼

中文的gbk(GB2312)編碼: 一個漢字對應兩組%xx,即%xx%xx
中文的UTF-8編碼: 一個漢字對應三組%xx,即%xx%xx%xx

Ⅵ Python 字元集編碼 - UTF-8 編碼

Unicode 的編碼范圍為 0~0x10FFFF ,如此大的范圍,顯然沒辦法像 ASCII 編碼一樣使用一個位元組存儲。為此,Unicode 制定了各種儲存編碼的方式,如: UTF-8 、 UTF-16 和 UTF-32 ,這些存儲格式被稱為 Unicode 轉換格式 UTF 。

每種 Unicode 轉換格式都會把一個編碼存儲為一到多個編碼單元,如 UTF-8 的編碼單元為 8 位的位元組; UTF-16 的編碼單元為 16 位,即 2 個位元組; UTF-32 的編碼單元為 32 位,即 4 個位元組。

其中, UTF-8 是在互聯網上使用最廣泛的一種 Unicode 轉換格式,具有以下顯著的優勢。下面,我們就先來看看 UTF-8 具有哪些有點吧~

1. UTF-8 中每個 ASCII 字元只需要一個位元組去存儲,因此一個 ASCII 文本本身也是一個 UTF-8 文本,即做到了向後兼容。

比如 A 的 ASCII 碼對應為 0x41 , a 的 ASCII 碼對應為 0x61 ,那麼 UTF-8 兼容 ASCII 也就意味著:

這里,需要再次提醒一下:Unicode 是表現形式,UTF-8 是存儲形式;即 UTF-8 解碼之後為 Unicode ,Unicode 可以編碼成 UTF-8 。

2. UTF-8 採用位元組為存儲單元,因此不存在位元組的大端和小段的問題。

UTF-16 和 UTF-32 的存儲單元分別是 2 位元組和 4 位元組,因此在存儲時會涉及到大小端的問題。那什麼是大小端模式呢?下面我們來暫停補充一下~

關於如何獲知你的環境使用的是大端模式還是小端模式,這里有個簡單的方式:定義一個 short 類型的數組即可:

數字 1 在 short 類型中表示為 0x0001 ,高位為 0x00 ,低位為 0x01 。我們可以很直觀地看到,數組在保存數據時,將高位 0x00 放在了高地址處,將低位 0x01 放在了低地址處。因此使用的就是小端模式。

那 UTF-8 為什麼可以使用位元組來作為存儲單元,而不用擔心位元組序的問題呢?這就涉及到了 UTF-8 巧妙的編碼規則~

UTF-8 最大的一個特點,就是它是一種變長的編碼方式。它可以使用 1~4 個位元組表示一個符號,根據不同的符號而變化位元組長度。UTF-8的編碼規則很簡單,只有二條:

1)對於單位元組符號,位元組的第一位設為 0 ,後 7 位為這個符號的 Unicode 碼。也就是我們上文提到的向後兼容:對於英文字母,UTF-8 編碼和 ASCII 碼是相同的。

2)對於使用 X 個位元組存儲的符號,第一個位元組的前 X 位設置為 1 ,第 X+1 位設置為 0 ,後面位元組的前 2 位一律設置為 10 ,剩下的位置一次填充這個符號的 Unicode 碼。

下表總結了編碼規則,字母 x 表示可用於編碼的位:

跟據上表,解讀 UTF-8 編碼也非常簡單:如果一個位元組的第一位是 0 ,則這個位元組單獨就是一個字元;如果第一位是 1 ,則連續有多少個 1 ,就表示當前字元佔用多少個位元組。

下面,我們就來演示一下 UTF-8 編碼的過程。

首先,獲取漢字 魚 的 Unicode 碼:

我們不妨先對 魚 這個漢字使用 utf-8 編碼看看使用幾個位元組存儲:

魚 在 UTF-8 編碼中使用 3 個位元組存儲,因此其存儲的二進制的形式為 1110xxxx 10xxxxxx 10xxxxxx ,將 Unicode 1001 110001 111100 依次填充到佔位符 x 的位置就得到: 11101001 10110001 10111100 。

下面,我們將上述推導得出的 11101001 10110001 10111100 轉換為十六進制,驗證一下是否為 b'xe9xb1xbc' :

驗證無誤!

Ⅶ python str與bytes編碼解碼

下面一張圖搞懂編碼、解碼、編碼表之間的關系。

不難看出,它們是一種根據編碼表進行翻譯、映射的過程:

實際上,字元串類型只有encode()方法,沒有decode()方法,而bytes類型只有decode()方法而沒有encode()方法。

二進制格式的數據也常稱為裸數據(raw data),所以str數據經過編碼後得到raw data,raw data解碼後得到的str。

上面說了,編碼是將字元數據轉換成位元組數據(raw data),解碼是將位元組數據轉換成字元數據。在Python中字元數據也就是字元串,即str類型,位元組數據也就是bytes類型或bytearray類型。

編碼時,可以使用位元組類型的構造方法bytes()、bytearray()來構造位元組,也可以使用str類型的encode()方法來轉換。

解碼時,可以使用str類型的構造方法str()來構造字元串,也可以使用bytes、bytearray()類型的decode()方法。

另外需要注意的是,編碼和解碼的過程中都需要指定編碼表(字元集),默認採用的是utf-8字元集。

例如,使用encode()的方式將str編碼為bytes數據。

使用bytes()和bytearray()將str構造成bytes或bytearray數據,這兩個方法都要求str->byte的過程中給定編碼。

實際上,bytes()、bytearray()這兩個方法構造位元組數據的時候還有點復雜,因為可以從多個數據源來構造,比如字元串、整數值、buffer。如何使用這兩個方法構造位元組數據,詳細內容參考help(bytes)和help(bytearray)給出的說明,這里給幾個簡單示例。

構造bytes的方式:

構造bytearray的方式:

解碼是位元組序列到str類型的轉換。

例如,使用decode()方法進行解碼"我"字,它的utf-8的編碼對應為"\xe6\x88\x91":

使用str()進行轉換。

當編碼、解碼的過程使用了不同的(不兼容的)編碼表時,就會出現亂碼。所以,解決亂碼的唯一方式是指定對應的編碼表進行編碼、解碼。

例如,使用utf-8編碼"我"字,得到一個bytes序列,然後使用gbk解碼這個bytes序列。

這里報錯了,因為utf-8的位元組序列里有gbk無法解碼的位元組。如果使用文本編輯器一樣的工具去顯化這個過程,得到的將是亂碼字元。

原文地址: https://www.cnblogs.com/f-ck-need-u/p/10185965.html

Ⅷ Python 編碼轉換與中文處理

python 中的 unicode 是讓人很困惑、比較難以理解的問題. 這篇文章 寫的比較好, utf-8是 unicode的一種實現方式,unicode、gbk、gb2312是編碼字元集.

Python 默認腳本文件都是 ANSCII 編碼的,當文件 中有非 ANSCII 編碼范圍內的字元的時候就要使用" 編碼指示 "來修正一個 mole 的定義中,如果.py文件中包含中文字元(嚴格的說是含有非anscii字元),則需要在第一行或第二行指定編碼聲明: # -*- coding=utf-8 -*- 或者 #coding=utf-8
其他的編碼如:gbk、gb2312也可以;否則會出現:

先說一下python中的字元串類型,在python中有兩種字元串類型,分別是 str 和 unicode ,他們都是basestring的派生類;

在str的文檔中有這樣的一句話:

也就是說在讀取一個文件的內容,或者從網路上讀取到內容時,保持的對象為str類型;如果想把一個str轉換成特定編碼類型,需要把str轉為Unicode,然後從unicode轉為特定的編碼類型如:utf-8、gb2312等。

unicode 轉為 gb2312,utf-8等,使用 encode(encoding)

utf-8,GBK轉換為 unicode 使用 unicode(s,encoding) 或者 s.decode(encoding)

普通的 str 轉為 unicode,

如果直接執行s.encode('gb2312')會發生什麼?

這里會發生一個異常:Python 會自動的先將 s 解碼為 unicode ,然後再編碼成 gb2312。因為解碼是python自動進行的,我們沒有指明解碼方式,python 就會使用 sys.defaultencoding 指明的方式來解碼。很多情況下 sys.defaultencoding 是 ANSCII,如果 s 不是這個類型就會出錯。
拿上面的情況來說,我的 sys.defaultencoding 是 anscii,而 s 的編碼方式和文件的編碼方式一致,是 utf8 的,所以出錯了:

對於這種情況,我們有兩種方法來改正錯誤:

s = '中文'
s.decode('utf-8').encode('gb2312') ```

import sys
reload(sys) # Python2.5 初始化後會刪除 sys.setdefaultencoding 這個方法,我們需要重新載入
sys.setdefaultencoding('utf-8')
str = '中文'
str.encode('gb2312')

print open("Test.txt").read()

import codecs
print open("Test.txt").read().decode("utf-8")

Traceback (most recent call last):
File "ChineseTest.py", line 3, in <mole>
print open("Test.txt").read().decode("utf-8")
UnicodeEncodeError: 'gbk' codec can't encode character u'ufeff' in position 0: illegal multibyte sequence

import codecs
data = open("Test.txt").read()
if data[:3] == codecs.BOM_UTF8:
data = data[3:]
print data.decode("utf-8")

s = "中文"
print unicode(s, "utf-8")

Traceback (most recent call last):
File "ChineseTest.py", line 3, in <mole>
s = unicode(s, "utf-8")
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-1: invalid data

s = "中文"
print unicode(s, "gbk")

s = "中文"
print unicode(s, "cp936")

Ⅸ ASN.1語法以及在python中如何編碼解碼



ASN.1的文章本來是免費的,但是有的人一定要搞小動作,咱惹不起就只能躲著了,做了一些修改後,改為付費文章



應用程序在網路協議的應用層對payload數據,多使用ASN.1標准進行處理

ASN.1

ASN.1



Abstract Syntax Notation One,抽象語法標記,ASN.1是描述數據格式的標准方法, 它不管語言是如何執行、這些數據具體指什麼、用什麼類型的編碼規則 ,是一種抽象的語法



ASN.1由兩部分組成:

一部分描述信息內數據,數據類型及序列格式

另一部分描述如何將各部分組成消息

語法

例如

Report ::= SEQUENCE {

author OCTET STRING,

title OCTET STRING,

body OCTET STRING,

biblio Bibliography



Report是結構體名稱

SEQUENCE表示消息是由許多數據單元構成的

中括弧{}裡面是各種類型的數據單元

前三個數據單元author/title/body的類型是OCTET STRING

最後一個數據單元biblio的類型是另一個ASN.1結構體

Bibliography ::= SEQUENCE {

author OCTET STRING

title OCTET STRING

publisher OCTET STRING

year OCTET STRING



數據類型

類型含義

NULL空

BOOLEAN布爾類型

INTEGER整型

REAL實數類型

BIT STRING比特串

OCTEC STRING位元組串

OBJECT IDENTIFIER實體標識符

ENUMERATED枚舉類型

SEQUENCE序列

SEQUENCE OF類型的序列

SET集合

SET OF類型的集合

CHOICECHOICE類型

...STRING(有很多就不一一列舉)字元串類型

UTCTime時間類型

GeneralizedTime時間類型

ASN.1文件結構

例如

Foo DEFINITIONS ::= BEGIN

    Question ::= SEQUENCE {

        id        INTEGER,

        question  IA5String

    }

    Answer ::= SEQUENCE {

        id        INTEGER,

        answer    BOOLEAN

    }

END 

解析上面的ASN.1文件的結構

ASN.1支持的編碼規則

基本編碼規則(BER)

規范編碼規則(CER)

識別名編碼規則(DER)

壓縮編碼規則(PER)

XML編碼規則(XER)

python如何對ASN.1結構的信息編碼和解碼

如果我們想用python對信息進行編碼,需要明確幾點:

提供的ASN.1格式的數據

更多內容,請參考公-中-號, 汽車網路診斷通信

熱點內容
華為honor6a如何重置密碼 發布:2025-01-21 05:37:30 瀏覽:986
黑客編程意思 發布:2025-01-21 05:34:34 瀏覽:18
資料庫伺服器遠程 發布:2025-01-21 05:34:34 瀏覽:700
ftp斷點續傳工具 發布:2025-01-21 05:13:42 瀏覽:990
哈弗h9買哪個配置劃算 發布:2025-01-21 05:01:19 瀏覽:641
微信視頻如何重新緩存 發布:2025-01-21 04:44:41 瀏覽:880
pdf壓縮文件大小 發布:2025-01-21 04:40:24 瀏覽:799
linux解壓文件到指定 發布:2025-01-21 04:38:36 瀏覽:875
自己做的安卓app怎麼下載 發布:2025-01-21 04:35:07 瀏覽:164
機頂盒加密頻道 發布:2025-01-21 04:26:48 瀏覽:318