摘要:不同編碼器編碼的相同的字符,最終的字節(jié)大小可能會不同。對于和,是由于對應編碼不能處理字符串字節(jié)導致的。在另外兩個規(guī)范化形式和的首字母縮略詞中,字母表示兼容性。最后是雙模,同一函數(shù)能接受字符串和字節(jié)進行操作。
對于字符串,我們接觸得挺多的。而編碼問題,也不時令人頭疼的。
由于一開始接觸的就是 Python3,所以一些在 Python2 上的編碼上的坑我沒遇到,甚至在 Python3 上都很少遇到編碼問題,因為 Python3 默認的編碼是 utf-8,而之前又從 Windows 轉(zhuǎn)到了 Arch,編碼問題已經(jīng)很少遇到了。
不過還是要重新認識一下字符與字節(jié)。字節(jié)可由指定字符串編碼得到,是不可變類型。使用下標獲取字節(jié)的值時,返回的是整數(shù)。這個是沒想到的。很多適用于 str 對象的方法也適用于 bytes 對象。
struct 模塊提供了一些函數(shù)可把字節(jié)序列與其他不同的類型互相轉(zhuǎn)換。memoryview 用于共享內(nèi)存,前面剛碰到過。
除了 utf-8 編碼,Python 還內(nèi)置了許多其他的編碼器。不同編碼器編碼的相同的字符,最終的字節(jié)大小可能會不同。
對于?UnicodeEncodeError 和?UnicodeDecodeError,是由于對應編碼不能處理字符串 / 字節(jié)導致的。而?SyntaxError,則是由于沒有聲明編碼,平臺編碼不能處理對應模塊的 .py 文件。
在處理文件文件時,建議是指定編碼打開或?qū)懭耄蝗豢绮僮飨到y(tǒng)運行腳本可能會出錯。
之后,講到了規(guī)范化 Unicode 字符串。之前是一直沒想過這樣的問題,一些特殊字符,該怎么搜索?這里給出了答案,那就是使用?unicodedata.normalize 函數(shù)提供的
Unicode 規(guī)范化。它有四個參數(shù):NFC、NFD、NFKC和NFKD。
?NFC(Normalization Form C)使用最少的碼位構(gòu)成等價的字符串,而?NFD 把組合字符分解成基字符和多帶帶的組合字符。
在另外兩個規(guī)范化形式(NFKC 和 NFKD)的首字母縮略詞中,字母 K 表示“compatibility”(兼容性)。
一般使用 NFC 保存字符串。后兩種轉(zhuǎn)換會有格式損失,但在搜索中卻很有用。
還有就是大小寫折疊,不僅僅是忽略大小寫,而且把其他一些符號改變。書上還介紹了一規(guī)范化——把變音符號去掉。
對 Unicode 字符的排序,可使用 key 關鍵字參數(shù)獲得我們想要的排序結(jié)果。之后就是 Unicode 數(shù)據(jù)庫,里面保存了各種關于 Unicode 的消息。
最后是雙模 API,同一函數(shù)能接受字符串和字節(jié)進行操作。
書上很多問題都沒怎么遇到,也沒想到會這么復雜,不過相信以后會接觸到的。慢慢消化吧。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/41583.html
摘要:處理文本的最佳實踐是三明治要盡早把輸入例如讀取文件時的字節(jié)序列解碼成字符串。這種三明治中的肉片是程序的業(yè)務邏輯,在這里只能處理字符串對象。 處理文本的最佳實踐是Unicode 三明治 要盡早把輸入(例如讀取文件時)的字節(jié)序列解碼成字符串。 這種三明治中的肉片是程序的業(yè)務邏輯,在這里只能處理字符串對象。 在其他處理過程中,一定不能編碼或解碼。 對輸出來說,則要盡量晚地把字符串編碼成字...
摘要:字符編碼表,碼位碼元將編碼字符集中的碼位轉(zhuǎn)換成有限比特長度的整型值的序列。字符編碼方案,碼元序列化也稱為常說的序列化。每個字節(jié)里的二進制數(shù)就是字節(jié)序列。另一個情況則是壓縮字節(jié)序列的值,如或進程長度編碼等無損壓縮技術(shù)。 《流暢的Python》筆記。本篇主要講述不同編碼之間的轉(zhuǎn)換問題,比較繁雜,如果平時處理文本不多,或者語言比較單一,沒有多語言文本處理的需求,則可以略過此篇。 1. 前言 ...
摘要:第一章數(shù)據(jù)類型隱式方法利用快速生成類方法方法通過下標找元素自動支持切片操作可迭代方法與如果是一個自定義類的對象,那么會自己去調(diào)用其中由你實現(xiàn)的方法。若返回,則會返回否則返回。一個對象沒有函數(shù),解釋器會用作為替代。 第一章 python數(shù)據(jù)類型 1 隱式方法 利用collections.namedtuple 快速生成類 import collections Card = collec...
閱讀 788·2021-11-23 09:51
閱讀 853·2021-11-23 09:51
閱讀 2519·2021-11-15 18:01
閱讀 3885·2021-10-11 11:07
閱讀 2417·2021-09-22 15:30
閱讀 1089·2021-09-22 14:59
閱讀 1571·2019-08-30 15:55
閱讀 1766·2019-08-30 15:52