Python實(shí)現(xiàn)將Unicode轉(zhuǎn)換為ASCII
通過本文,我們將學(xué)習(xí)如何將 Unicode 編碼為字節(jié),了解系統(tǒng)編碼的不同方法以及在 Python 中將 Unicode 轉(zhuǎn)換為 ASCII。
在 Python 中將 Unicode 轉(zhuǎn)換為 ASCII
Python 3 字符串的基本問題是由字符組成的; Python 中沒有字符類型,但它們包含 Unicode 字符。
如果我們說 a = ‘abcd’ 并使用 len() 函數(shù)檢查它的長度,那么我們得到 4 并且我們聲明 s=‘????’ 意思是你好,這是希伯來語中的單詞。 這些長度是相同的,這很好,因?yàn)閮蓚€(gè)變量都有四個(gè)字符。
>>a='abcd' >>len(a) 4 >>s='????' >>len(s) 4
事實(shí)上,幕后是不同的字節(jié)數(shù)與這里的問題無關(guān),len() 測量的是字符數(shù),而不是字節(jié)數(shù),但當(dāng)然,在幕后,UTF-8 Unicode 字符和 UTF-8 編碼使用更多字節(jié)。
那么我們?nèi)绾螌⒆址D(zhuǎn)換為我們需要的字節(jié)呢? 好吧,我們可以使用 s.encode(),如果我們這樣做,它會返回一個(gè)字節(jié)字符串,該字符串將是我們創(chuàng)建希伯來語單詞 ???? 所需的八個(gè)字節(jié)。
>>s.encode() b'\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d' >>'abcd'.encode() b'abcd'
現(xiàn)在我們將獲取一個(gè) Unicode 字符串并將其轉(zhuǎn)換為字節(jié)字符串,但它比這更復(fù)雜,因?yàn)槲覀冎肋@個(gè)字符串是什么,并且我們想要取回不代表 Unicode 底層字節(jié)的字節(jié)。 我們想要取回不同編碼系統(tǒng)的底層字節(jié)。
例如,我們使用 iso-8859-8,這是您可能聽說過的一種在西歐廣泛使用的編碼類型,它允許我們在一個(gè)字節(jié)中包含特定語言所需的所有不同字符 ,所以如果我們需要將一個(gè)字符串轉(zhuǎn)換為非 Unicode 的編碼。
>>s.encode('iso-8859-8') b'\xf9\xec\xe5\xed'
讓我們看看如果我們有來自不同語言的東西會發(fā)生什么,就像我們說 s='北京' 就是北京,如果我們對其進(jìn)行編碼,那么我們會得到一個(gè)字節(jié)字符串。
我們看到這里有六個(gè)字節(jié),因?yàn)槊總€(gè)漢字都由三個(gè)字節(jié)表示; 這是我們使用 UTF-8 進(jìn)行的可變長度編碼。
>>s='北京' >>s.encode() b'\xe5\x8c\x97\xe4\xba\xac'
現(xiàn)在我們想使用 iso-8859-8 對 北京 進(jìn)行編碼,當(dāng)我們執(zhí)行此操作時(shí),我們會得到 UnicodeEncodeError,這意味著編碼告訴我們您想要獲取這些 Unicode 字符并將它們轉(zhuǎn)換為 iso-8859 的字節(jié) -8 不允許的編碼。
s.encode('iso-8859-8')
如果我們用這個(gè)連接英語單詞,它也會失敗,因?yàn)槿魏蔚胤轿覀兛赡苡绣e(cuò)誤,它都會失敗,但我們可以添加一個(gè)參數(shù)來幫助忽略錯(cuò)誤。
>>s='I often go to 北京' >>s.encode('iso-8859-8',errors='ignore') b'I often go to '
如果您有一大堆文本并且可以丟失 Unicode 字符,則可以使用此選項(xiàng)。
讓我們看一下默認(rèn)情況下等于 strict 的 help(s.encode),但它可以是一些不同的東西,所以如果我們使用替換值來錯(cuò)誤,它并不真正知道如何替換,所以它 只是要使用問號。
help(s.encode)
>>s='I often go to 北京' >>s.encode('iso-8859-8',errors='replace') b'I often go to ??'
當(dāng)我們使用 xmlcharrefreplace 時(shí),我們會返回與這些 Unicode 字符有關(guān)的 XML 實(shí)體,因此如果您要將其粘貼到 XML 文檔或 HTML 中,那么這將起作用。
>>s.encode('iso-8859-8',errors='xmlcharrefreplace') b'I often go to 北京'
這取決于您的需求; 如果您將 Unicode 字符轉(zhuǎn)換為字節(jié),這是典型的情況,因?yàn)槟鷮⑼ㄟ^網(wǎng)絡(luò)發(fā)送它們,或者您正在處理某種其他類型的編碼系統(tǒng)。
如果您是初學(xué)者并且不想詳細(xì)介紹,請使用以下命令安裝名為 unidecode 的 Python 包。
它將直接將 Unicode 轉(zhuǎn)換為 ASCII; 當(dāng)您使用需要將 Unicode 轉(zhuǎn)換為 ASCII 的應(yīng)用程序時(shí),它會很有幫助。
>>pip install unidecode >>>from unidecode import unidecode >>>unidecode(u'北京') 'Bei Jing'
到此這篇關(guān)于Python實(shí)現(xiàn)將Unicode轉(zhuǎn)換為ASCII的文章就介紹到這了,更多相關(guān)Python Unicode轉(zhuǎn)ASCII內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)生成字符串大小寫字母和數(shù)字的各種組合
這篇文章主要給大家介紹了關(guān)于python生成各種字符串的方法實(shí)例,給大家提供些思路,拋磚引玉,希望大家能夠喜歡2019-01-01python configparser中默認(rèn)值的設(shè)定方式
這篇文章主要介紹了python configparser中默認(rèn)值的設(shè)定方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
這篇文章主要介紹了在Mac OS上部署Nginx和FastCGI以及Flask框架的教程,Flask是Python下一個(gè)極簡的web開放框架,需要的朋友可以參考下2015-05-05selenium學(xué)習(xí)教程之定位以及切換frame(iframe)
這篇文章主要給大家介紹了關(guān)于selenium學(xué)習(xí)教程之定位以及切換frame(iframe)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Django數(shù)據(jù)庫操作之save與update的使用
這篇文章主要介紹了Django數(shù)據(jù)庫操作之save與update的使用,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04Python中實(shí)現(xiàn)進(jìn)度條的多種方法總結(jié)
在Python編程中,進(jìn)度條是一個(gè)非常有用的功能,它能讓用戶直觀地了解任務(wù)的進(jìn)度,提升用戶體驗(yàn),本文將介紹幾種在Python中實(shí)現(xiàn)進(jìn)度條的常用方法,并通過代碼示例和案例來展示它們的具體應(yīng)用,需要的朋友可以參考下2025-01-01