當前位置:首頁 » 編程語言 » pythonunicodebyte

pythonunicodebyte

發布時間: 2022-08-11 11:38:50

㈠ 如何理解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 和utf8編碼是什麼意思

編碼是用於講二進制格式(byte)轉化為漢語,英文等文字的方式。如果是unicode,那就是一種全球通用的編碼,但是台灣用的多,mac系統是utf-8,windows你用GB2312

㈢ python文件怎麼突然變成這個樣了

你看下這個是python的軟體文件,如果不是,你選擇文件,右擊一下,重新選擇打開這種類型的軟體即可

㈣ Python文件處理里encoding和encode有事區別,bytes類型是什麼意思

python問題我來回答你。

  1. 首先你要知道的是,字元串在Python內部的表示是unicode(統一碼、萬國碼)編碼,很多編程語言都是這么設計的,各個國家通用編碼,因此,在做編碼轉換時,通常需要以unicode作為中間編碼,即先將其他編碼的字元串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。

    decode的作用是將其他編碼的字元串轉換成unicode編碼,如str1.decode('gb2312'),表示將gb2312編碼的字元串str1轉換成unicode編碼。

    encode的作用是將unicode編碼轉換成其他編碼的字元串,如str2.encode('gb2312'),表示將unicode編碼的字元串str2轉換成gb2312編碼。

    因此,轉碼的時候一定要先搞明白,字元串str是什麼編碼,然後decode成unicode,然後再encode成其他編碼。

  2. bytes類型是 Python 3.x版本新增的數據類型,在 Python 2.x 中是不存在的。字元串是以字元為單位進行處理的,bytes類型是以位元組為單位處理的。

    bytes 只負責以位元組序列的形式(二進制形式)來存儲數據,至於這些數據到底表示什麼內容(字元串、數字、圖片、音頻等),完全由程序的解析方式決定。

    說白了,bytes 只是簡單地記錄內存中的原始數據,至於如何使用這些數據,bytes 並不在意,你想怎麼使用就怎麼使用,bytes 並不約束你的行為。

    bytes 類型的數據非常適合在互聯網上傳輸,可以用於網路通信編程;bytes 也可以用來存儲圖片、音頻、視頻等二進制格式的文件。

舉個例子:

b = b'' # 創建一個空的bytes

b = byte() # 創建一個空的bytes

b = b'hello' # 直接指定這個hello是bytes類型

b = bytes('string',encoding='編碼類型') #利用內置bytes方法,將字元串轉換為指定編碼的bytes

b = str.encode('編碼類型') # 利用字元串的encode方法編碼成bytes,默認為utf-8類型

bytes.decode('編碼類型'):將bytes對象解碼成字元串,默認使用utf-8進行解碼。

㈤ python 怎麼將字元串轉換為byte

用ord()內置函數將char轉換為byte
str_object.encode('utf-8'); python3可用,2不太清楚,只要你把他編碼成unicode就是

㈥ 了解python中bytes,str和unicode的區別

str是經過編好碼的字元串,如unicode,gb2312,ascii編碼,可以表示不同語言中的字元,可以解碼成byte byte是位元組,只能是ascii碼0-255的字元,表示未經編碼處理的原始字元串

㈦ 如何使用python 打開unicode的文件

Python核心庫的open函數是按照ascii設計的。但是,現在我們越來越多地要面對Unicode文件。好在python提供了codecs模塊,幫我們解決了這個問題。
codecs模塊的open定義如下
open( filename, mode[, encoding[, errors[, buffering]]])
Open an encoded file using the given mode and return a wrapped version providing transparent encoding/decoding.
其中前兩個參數filename和mode和默認的open相同。第三個參數encoding是關鍵,制定了文件的編碼方式。
對於常用的Unicode有這幾種utf_16、utf_16_le、utf_16_be、utf_8,每一種還有一些可用的別名,具體可以查找python manual。
utf_16、utf_16_le、utf_16_be參數的區別是這樣的。
如果指定了utf_16,python會檢查文件的BOM(Byte Order Mark)來判斷,文件類型到底是utf_16_le、utf_16_be。對於沒有BOM的文件會報錯。
如果我們直接指定了utf_16_le、utf_16_be,python就不檢查BOM了。對於沒有BOM的文件很好用。但是,對於有BOM的文件就要注意,它會把BOM當作第一個字元讀入。

㈧ python中怎樣將unicode轉換成原來的中文

python默認就是unicode存儲。如果是從文件讀取的,在open的參數中指定encoding關鍵字參數就行。如下:

#coding=utf-8/importjson /defLoadQuestion(): /f=open("test.json",'r') qas=json.load(f) question=qas['documents'] /returnquestion/t=LoadQuestion() /printstr(t).decode("unicode-escape")

拓展資料:

通常python2時所有IO讀寫都是byte方式。也就是編碼後的。java也是這樣子。只有python3還有某些特定的模塊才會自動將byte重新轉換成unicode

在python2里的確可以使用s.decode('gbk','ignore')之類的變成unicode。不過在python3里應該是這樣子, s.encode('gbk','ignore')這樣就變成了byte

如果你喜歡 utf-8,可以s.encode(『utf-8','ignore')和s.decode(『utf-8','ignore')

熱點內容
我的世界伺服器怕被破壞怎麼辦 發布:2025-01-21 02:33:15 瀏覽:932
linux下交叉編譯實驗 發布:2025-01-21 02:19:00 瀏覽:434
java培訓班多少錢 發布:2025-01-21 02:17:23 瀏覽:335
帝豪gl哪個配置是電容屏 發布:2025-01-21 02:11:23 瀏覽:304
openwrt編譯零基礎 發布:2025-01-21 01:53:30 瀏覽:20
視頻聊天室源碼php 發布:2025-01-21 01:39:29 瀏覽:939
游戲腳本xp 發布:2025-01-21 01:25:48 瀏覽:210
cfa建模需要什麼電腦配置 發布:2025-01-21 01:16:41 瀏覽:97
配置獲取異常怎麼辦 發布:2025-01-21 01:16:29 瀏覽:642
植發都加密嗎 發布:2025-01-21 01:16:28 瀏覽:736