導航:首頁 > 編程語言 > python的unicode編碼大全

python的unicode編碼大全

發布時間:2023-01-08 01:43:57

python3 pickle中怎麼使用unicode編碼

Python特有編碼
Python還內置一些特有的編碼集。
4.2.4.1 文本編碼
Python提供了下面從字元串到位元組數組的編碼,以及位元組數據到字元串的解碼:

Codec

Aliases

Purpose

idna

Implements RFC 3490, see also encodings.idna. Only errors='strict' is supported.

mbcs

dbcs

Windows only: Encode operand according to the ANSI codepage (CP_ACP)

palmos

Encoding of PalmOS 3.5

punycode

Implements RFC 3492. Stateful codecs are not supported.

raw_unicode_escape

Latin-1 encoding with \uXXXX and \UXXXXXXXX for other code points. Existing backslashes are not escaped in any way. It is used in the Python pickle protocol.

undefined

Raise an exception for all conversions, even empty strings. The error handler is ignored.

unicode_escape

Encoding suitable as the contents of a Unicode literal in ASCII-encoded Python source code, except that quotes are not escaped. Decodes from Latin-1 source code. Beware that Python source code actually uses UTF-8 by default.

unicode_internal

Return the internal representation of the operand. Stateful codecs are not supported.
Deprecated since version 3.3: This representation is obsoleted by PEP 393

4.2.4.2 二進制編碼轉換
Python提供下面的二進制編碼轉換:位元組對象到位元組對象映射轉換,不支持使用bytes.decode()。

Codec

Aliases

Purpose

Encoder / decoder

base64_codec [1]

base64, base_64

Convert operand to MIME base64 (the result always includes a trailing '\n')
Changed in version 3.4: accepts any bytes-like object as input for encoding and decoding

base64.b64encode() / base64.b64decode()

bz2_codec

bz2

Compress the operand using bz2

bz2.compress() / bz2.decompress()

hex_codec

hex

Convert operand to hexadecimal representation, with two digits per byte

base64.b16encode() / base64.b16decode()

quopri_codec

quopri, quotedprintable, quoted_printable

Convert operand to MIME quoted printable

quopri.encodestring() / quopri.decodestring()

uu_codec

uu

Convert the operand using uuencode

uu.encode() / uu.decode()

zlib_codec

zip, zlib

Compress the operand using gzip

zlib.compress() / zlib.decompress()

4.2.4.3 文本編碼轉換

下面編解碼器支持字元串到字元串的轉換:

Codec

Aliases

Purpose

rot_13

rot13

Returns the Caesar-cypher encryption of the operand

4.2.5 encodings.idna--國際化域名的應用
本模塊實現了RFC 3490(Internationalized Domain Names in Applications)和RFC 3492(Nameprep: A Stringprep Profile for Internationalized Domain Names (IDN) 的功能。它實現的功能建立在punycode編碼和stringprep模塊之上。
這兩個RFC定義了非ASCII字元表示域名的規范。如果一個域名含有非ASCII字元,需要把它轉換為ASCII兼容編碼的域名(ACE),因為有一些網路協議不支持非ASCII字元的域名,比如DNS查詢、HTTP主機等等。因此這些轉換工作可以人工轉換,也可以是程序轉換。在程序里轉換,需要把UNICODE的域名轉換為ACE兼容的域名之後,才能進行處理,當要給用戶顯示時需要從ACE反向轉換為UNICODE域名。

Python提供了好幾種方法來做轉換的工作:使用idna編解碼來操作UNICODE與ACE之間相互轉換;把輸入字元串分離成標記,然後通過RFC3490進行查表,再合並成相應的域名;最後一種是把輸入字元串分成標記,通過ACE標記轉換。在socket模塊里,就透明地實現了從UNICODE主機名稱轉換為ACE域名,所以應用程序在調用這個模塊時就不需要考慮UNICODE域名轉換為ACE域名的工作了。基於socket模塊之上的功能,比如http.client和ftplib都可以接受UNICODE域名。

當從網路收到的域名,它是不會自動轉換為 UNICODE域名的,需要應用程序進行轉換之後,才能以UNICODE域名顯示給用戶。

模塊encodings.idna也實現nameprep的處理,它能實現主機名稱的標准化處理,域名的大小寫統一化,如果需要這些功能是可以直接使用。

encodings.idna.nameprep(label)
返回label的國際化標志名稱。

encodings.idna.ToASCII(label)
轉換label為ASCII表示,符合標准RFC 3490。

encodings.idna.ToUnicode(label)
轉換label為UNICODE表示,符合標准RFC 3490.
4.2.6 encodings.mbcs--Windows的ANSI編碼
本模塊實現從ANSI(CP_ACP)代碼進行編碼的功能。僅在Windows系統上可用。

4.2.7 encodings.utf_8_sig-UTF-8帶BOM標記的codec編碼
本模塊實現UTF-8的編碼和解碼:把帶有BOM的UTF-8編碼轉換為不帶BOM的UTF-8編碼。當在生成BOM時,只在第一次時生成;當在解碼時跳過相應的BOM標記位元組,再進行解碼。

Ⅱ 如何理解python3的unicode,以及全形半形轉換

1. unicode是一個編碼的standard,表明了字元與數字之間的映射,是可變長的。

2. 映射後的數據如何編碼為位元組?這個就是具體的編碼規則:目前最主流的是UTF-8,同樣,它也是變字長的。

python3中的str都是unicode的:「The default encoding for Python source code is UTF-8」

python3中的encode:按照encode()括弧中的參數對字元串進行編碼,就是生成bytes。

所以:

In:'中文'.encode('utf-8')
Out:b'\xe4\xb8\xad\xe6\x96\x87'

這里的b就是Byte,\x表示這個x是被轉義的,意思就是0x。又如:

In: 'abc'.encode('utf-8')

Out: b'abc'

上面的b'a'其實表示的是數字97,b'a'的意思就是字元串'a'的binary數字:

[In]:'abc'.encode('utf-8')[0]

[Out]: 97

同時可以把b'\x'進行解碼,即:
In:b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
Out:'中文'
除了encode('utf-8')外,用ord可以獲得單個utf-8字元對應的數字:

In [60]: ord('a')
Out[60]: 97
In [61]: ord('a')#這個是全形的a
Out[61]: 65345

除了decode('utf-8')外,用chr可以獲得數字對應的utf-8字元:

In [62]: chr(97)
Out[62]: 'a'

除了unicode還有別的編碼標准嗎?有啊,比如我國的GBK,別名也叫cp936。

全形和半形之分,是指同樣一個意義的字元,顯示的大小不同.具體來說,全形和半形的編碼是兩個結果:

In [70]: "mn".encode('utf-8')
Out[70]: b'\xef\xbd\x8d\xef\xbd\x8e
[In]:"mn".encode('utf-8')

[Out]:b'mn'

它們有什麼對應關系呢?(引自這里)

轉換說明
全形半形轉換說明
有規律(不含空格):
全形字元unicode編碼從65281~65374 (十六進制 0xFF01 ~ 0xFF5E)
半形字元unicode編碼從33~126 (十六進制 0x21~ 0x7E)
特例:
空格比較特殊,全形為 12288(0x3000),半形為 32(0x20)
除空格外,全形/半形按unicode編碼排序在順序上是對應的(半形 + 0x7e= 全形),所以可以直接通過用+-法來處理非空格數據,對空格單獨處理。
代碼在此基礎上改動一下(將unichr改為chr即可,適應python3),即:

def strQ2B(ustring):
"""全形轉半形"""
rstring = ""
for uchar in ustring:
inside_code=ord(uchar)
if inside_code == 12288: #全形空格直接轉換
inside_code = 32
elif (inside_code >= 65281 and inside_code <= 65374): #全形字元(除空格)根據關系轉化
inside_code -= 65248
rstring += chr(inside_code)
return rstring

In [69]: strQ2B('你好python')
Out[69]: '你好python'

Ⅲ python unicode編碼

python unicode編碼:

下面的代碼創建了一個Unicode字元串,用UTF-8編碼器將它編碼,然後寫入到一個文件中去,接著把數據從文件中讀回來,解碼成Unicode字元串對象,最後,列印出Unicode字元串,用以確認程序正確地運行。

linux中編寫,在VIM中輸入如下代碼,保存為uniFile.py

#/home/xiaopeng/python/code/uniFile.py
'''
:Writes
aUnicodestringtoafileinutf-8andreadsitbackin
'''
CODEC='utf-8'編碼方式
FILE='unicode.txt'要存的文件名
hello_out=u"Helloworld "創建了一個Unicode格式的字元串
bytes_out=hello_out.encode(CODEC)用UTF-8編碼
f=open(FILE,'w')
f.write(bytes_out)寫入指定文件中
f.close()
f=open(FILE,'r')
bytes_in=f.read()讀取
f.close()
hello_in=bytes_in.decode(CODEC)解碼
printhello_in列印

在終端中輸入:python uniFile.py

結果列印出 Hello world

然後在python目錄下會發現多了一個名為unicode.txt的文件,用cat命令查看一下,發現裡面的內容和列印的結果一樣.

把Unicode應用到實際中注意一下四點:

1程序中出現字元串時一定要加一個前綴u

2不要用str()函數,用Unicode()代替

3 不要用過時的string模塊。如果傳給它非ASCII碼,它會把一切搞砸。

4 不到必須時不要在你的程序里編解碼Unicode字元,只在你要寫入文件或者資料庫或者網路時,才調用encode()函數和decode()函數。

Ⅳ Python2.7 中文字元編碼,使用Unicode時,選擇什麼編碼格式

關於編碼和亂碼的問題,我簡單講一下。

通常問這類問題的人是混淆了若干個不同的概念,並且他們自己也沒有意識到自己混淆了這些概念的。

Ⅳ day-04 總結python字元串

1.什麼是字元串
序列,有序,不可變的
用單引號或者雙引號任意字元集,

2,字元串中的字元
普通字元:ན', 'sdfsdfsd', '+ + (**&^%$#@@', '發技術規范舉案說法'

'''
python中的字元採用的是unicode編碼

1.什麼是編碼
就是數字和字元的一一對應的,其中字元對應的數字就是字元的編碼
a - 97
b - 98

2.編碼方式
ASCII碼表 :針對數字字元,字母字元(26個小寫字母和26個大寫字母),一些英文中對應的符號進行編碼
小寫字母要大於大寫字母的編碼值,採用一個位元組對字元進行編碼,只能對128個字元進行編碼

Unicode碼 :Unicode碼包含了ASCII碼表,同時能夠對世界上所有語言對應的符號進行編碼,
採用兩個位元組進行編碼,能夠編碼65536個字元

3.兩個函數
chr(編碼值)--將字元編碼值轉化為字元
ord(字元)-- 獲取字元對應的編碼值
中文編碼范圍 0x4e00~~~~~0x9fa5

一旦一個字元串確定了,那麼字元串中每個字元的位置就確定了,而且每個字元會對應一個表示其位置和順序的下標值

1,下標(索引)
字元串中的每一個字元都有一個下標,代表在字元串中的位置
下標范圍是:0到字元串長度---1 0(代表第一個字元的位置)
-1 ~ 字元串長度 -1(代表字元串中最後一個字元的位置)

'abc' # ''

獲取單個字元
語法:字元串[下標]--獲取字元串中指定下標對應的字元
說明 字元串--可以是字元串常量,也可以是字元串變數
[]---固定寫法
下標--字元的下標,不能越界。

獲取部分字元
語法:字元串[開始下標:結束下標:步長]
步長-- 一個整數
功能: 從開始下標獲取到結束下標前位置,每次下標值增加步長,結果是字元串
注意:當步長是整數,開始下標對應的字元要在結束下標的前面
當步長是負數,開始下標對應的字元要在結束下標的後面

方法2:字元串[開始下表:結束下標](相當於步長是一)

獲取部分字元,省略下標
獲取部分字元的時候開始下標和結束下標都可以省略
a.開始下標省略
字元串[:結束下標:步長] 或者字元串[:結束下表]
字元串是正數:從字元串開頭開始往後獲取
字元串是負數:從字元串結尾開始往前獲取

結束下標省略
字元串[開始下標::步長]
步長是正數,從開始下標從前往後獲取到字元串最後
步長是負數,從開始下標從後往前獲取到字元串開始

,加法運算
字元串1 + 字元串2 將兩個字元串拼接在一起,產生一個新的字元串

乘法運算
字元串 * n(正整數):字元串中的內容重復n次產生一個新的字元串

比較運算符
a. == !=
字元串1 == 字元串2 ---------判斷兩個字元串是否相等

b.> ,< , >= ,<= (所有的大寫字母編碼都比小寫的編碼小)
兩個字元串比較大下:從第一個開始,找到第一對不同的字元,然後比較他們的編碼值的大小

in 和 not in
字元串1 in 字元串2 :判斷字元串2是否包含字元串1
字元串1 not in 字元串2 :判斷字元串2是否不包含字元串1

len函數
len(序列)------- 獲取序列的長度
len(字元串)----獲取字元串中字元的個數

str函數
str(數據): 將數據轉換成字元串

其他數據轉換成字元串
所有的數據都可以轉換成字元串,轉換的時候就是在數據的值的最外面加引號

補充:系統對應的類型名不能用來給變數命名

字元串轉其他類型
字元串轉整數: int(字元串) 去掉引號後本身就是個整數的字元串才能轉
字元串轉浮點型: Float(字元串)
字元串轉布爾: boll(字元串) ,除了空串會轉化成False,其他的都會轉化成True

格式字元串
指的是字元串中通過格式佔位符來表示字元串中變化,然後後面再通過其他的值來給佔位符賦值
含有格式佔位符的字元串 % (佔位符對應的值)
說明:
含有格式佔位符有固定寫法,可以有多個
%----固定寫法
()----裡面值 的個數要和前面的格式佔位符一一對應
%d--整數
%s--字元串
%f--小數
%c--字元(可以將數字轉換成字元)

字元串.capitalize() - 將字元串第一個字元轉換成大寫

2.字元串對齊
字元串.center(width, fillchar) - 居中
字元串.ljust(width, fillchar) - 左對齊
字元串.rjust(width, fillchar) - 右對齊

width - 正整數,表示新的字元串的寬度
fillchar - 字元, 填充字元串

字元串.isalpha 若字元串至少有一個字元,並且所有字元都是字母就返回True,否則返回False

字元串。isdigit() 若字元串中只包含數字就返回True,否則返回False

若字元串中只包含數字字元,則返回True,否則返回 False

3.join(seq)
字元串1.join(字元串2): 將字元串1的內容插入到字元串2的每個字元之間

max(字元串) 編碼最大
min(字元串)

count(str)|返回 str 在 string 裡面出現的次數

|islower()|如果字元串中包含至少一個區分大小寫的字元,並且所有這些(區分大小寫的)字元都是小寫,則返回 True,否則返回 False

expandtabs(tabsize=8)|把字元串 string 中的 tab 符號轉為空格,tab 符號默認的空格數是 8 。

|isspace()|如果字元串中只包含空白,則返回 True,否則返回 False

endswith(suffix)|檢查字元串是否以 obj 結束,如果beg 或者 end 指定則檢查指定的范圍內是否以 obj 結束,如果是,返回 True,否則返回 False.

Ⅵ python是什麼編碼格式

python編碼總結:
1).首先python有兩種格式的字元串,str和unicode,其中unicode相當於位元組碼那樣,可以跨平台使用。
str轉化為unicode可以通過unicode(),u,str.decode三種方式
unicode轉化為str,如果有中文的話,一般通過encode的方式
2).如果代碼中有中文的話,我們一般會添加 "# coding=utf-8",這個是什麼作用呢,一般如下:
如果代碼中有中文注釋,就需要此聲明比較高級的編輯器(比如我的emacs),會根據頭部聲明,將此作為代碼文件的格式。程序會通過
頭部聲明,解碼初始化 u」人生苦短」,這樣的unicode對象,(所以頭部聲明和代碼的存儲格式要一致
所以,當我們填上編碼頭的時候,使用s="中文",實際上type(s)是一個str,是已經將unicode以utf-8格式編碼成str。
其次,如果我們在代碼中使用s=u'中文',相當於將str以utf-8解碼成unicode。
推薦學習《python教程》。

Ⅶ python 字元串格式的unicode編碼轉中文

 python對於Unicode編碼可以使用decode進行轉換成中文:

>>> str = b'\xe8\xb4\xb9\xe8\x84\x91\xe5\xad\x90'

>>> str.decode('utf-8')

'費腦子'

如果是字元串類型的Unicode編碼沒辦法直接用decode進行轉換:

>>> str ="\\xe8\\xb4\\xb9\\xe8\\x84\\x91\\xe5\\xad\\x90"

>>> str.decode('utf-8')

Traceback (most recent call last):

  File "<stdin>", line 1, in <mole>

AttributeError: 'str' object has no attribute 'decode'

處理方式:

>>> str = eval("b" + "\"" + str + "\"")

>>> str.decode('utf-8')

'費腦子'

Ⅷ python編程(三級)1、編碼、數制

在計算機中使用的是二進制,(為什麼呢,因為二進制計算簡單,可以用電路表示等等很多優點)。但是二進制對閱讀和使用是不友好的,因此需要將二進制轉換為人類使用的語言,英語,中文等,這就是編碼。

最初的編碼就是ASCII編碼,美國信息交換碼。它使用一個位元組,8位二進制,可以表示128個符號。常用的1-9,26個字母以及一些英語符號等。

ascii表是不能表示中文的,因此中文也有專門的編碼,諸如GB2312,GBK等。其它國家也有類似編碼,因此為了方便信息的交流,也就有了統一編碼,Unicode,又叫萬國碼。unicode用0-65535來表示所有字元,Unicode用2-4個位元組存儲。不同的存儲方式,又不同的編碼,這就是UTF-8,UTF-16,UTF-32。utf-8根據字元數字的大小,來決定存儲位元組,存儲英文字元時用1個位元組,存儲漢字時用2個位元組。utf-16,兩個位元組,utf-32,四個位元組。

python3 在內存中使用的是Unicode,萬國碼,默認的編碼是utf-8。

chr() ,轉換為對應Unicode表字元

ord(),轉換為對於Unicode表數字

encode(),編碼,將str轉換為位元組流

decode(),解碼,將位元組流轉換為str

計算機存儲數據的格式是二進制,日常和數學中使用的數字是十進制,為了表達簡化,因此有了十六進制、八進制。

二進制---->十進制---->八進制---》十六進制

10000001  ---》129  ---》201---》81

從上式可以看出來,進制越大,表達更大數時更簡化。

二進制轉十進制  ,按權展開相加

十進制轉二進制,除基取余

二進制轉八進制 ,從右往左,取3位轉換為十進製得到即為8進制,不足3位左邊補0。

八進制轉二進制,每位展開得到3個二進制位

二進制轉十六進制,,從右往左,取4位轉換為十進製得到即為16進制,不足3位左邊補0。

十六進制轉二進制,每位展開得到四個二進制位

int() ,

hex(),轉換為16進制

bin(),轉換為二進制

oct(),轉換為八進制

Ⅸ python123漢字的unicode編碼值

python的默認編碼是ascii,可以通過sys.setdefaultencoding('utf-8')函數設置python的默認編碼。

python中可以通過encode和decode的方式改變數據的編碼,比如:

>>> u'漢字'

u'\u6c49\u5b57'

>>> u'漢字'.encode('utf-8')

'\xe6\xb1\x89\xe5\xad\x97'

>>> u'漢字'.encode('utf-8').decode('utf-8')

u'\u6c49\u5b57'

我們可以通過這兩個函數設置編碼。

那麼,python中的str是什麼類型?

>>> import binascii

>>> '漢字'

'\xba\xba\xd7\xd6'

>>> type('漢字')

>>> print binascii.b2a_hex('漢字')

babad7d6

>>> print binascii.b2a_hex(u'漢字')

Traceback (most recent call last):

File "", line 1, in

UnicodeEncodeError: 'ascii' codec can't encode characters in

position 0-1: ordinal not in range(128)

>>> print binascii.b2a_hex(u'漢字'.encode('utf-8'))

e6b189e5ad97

>>> print binascii.b2a_hex(u'漢字'.encode('gbk'))

babad7d6

binascii是將數據的二進制轉換成ascii,上面的解釋是:『漢字'的類型是str,二進制是babad7d6,u『漢字'是無法轉換成ascii,這樣就報出了開頭的第一個錯誤。解決辦法就是把它.encode(『utf-8')成str類型。因為我命令行是windows默認的GBK編碼,所有u'漢字'.encode(『gbk')的時候,輸出結果和『漢字'結果一樣。

閱讀全文

與python的unicode編碼大全相關的資料

熱點內容
黑馬程序員路徑大全 瀏覽:1000
saas平台PHP 瀏覽:333
雲伺服器科學計算配置怎麼選 瀏覽:649
jar解壓命令 瀏覽:609
php正則問號 瀏覽:299
無線已加密不可上網是怎麼了 瀏覽:464
什麼app可以免費做手機 瀏覽:375
異性下載什麼app 瀏覽:680
51單片機程序單步視頻 瀏覽:241
家庭寬頻如何連接伺服器 瀏覽:119
汽車高壓泵解壓 瀏覽:772
上門正骨用什麼app 瀏覽:761
安卓為什麼免費使用 瀏覽:397
加密貨幣都有哪些平台 瀏覽:628
python和matlab難度 瀏覽:391
python爬蟲很難學么 瀏覽:574
小米解壓積木可以組成什麼呢 瀏覽:816
為什麼滴滴出行app還能用 瀏覽:566
怎麼升級手機android 瀏覽:926
php權威編程pdf 瀏覽:998