UCD介紹
unicodedata.lookup(name)
unicodedata.name(chr[,default])
unicodedata.decimal(chr[, default])
unicodedata.digit(chr[, default])
unicodedata.numeric(chr[, default])
unicodedata.category(chr)
unicodedata.bidirectional(chr)
unicodedata.combining(chr)
unicodedata.east_asian_width(chr)
unicodedata.mirrored(chr)
unicodedata.decomposition(chr)
unicodedata.normalize(form, unistr)
unicodedata.unidata_version
UCD介紹UCD是Unicode字符數據庫(Unicode Character DataBase)的縮寫。
UCD由一些描述Unicode字符屬性和內部關系的純文本或html文件組成。
UCD中的文本文件大都是適合於程序分析的Unicode相關數據。其中的html文件解釋了數據庫的組織,數據的格式和含義。
UCD中最龐大的文件無疑就是描述漢字屬性的文件Unihan.txt。
在UCD 5.0,0中,Unihan.txt文件大小有28,221K字節。Unihan.txt中包含了很多有參考價值的索引,例如漢字部首、筆劃、拼音、使用頻度、四角號碼排序等。這些索引都是基於一些比較權威的辭典,但大多數索引只能檢索部分漢字。
unicodedata.lookup(name)通過名稱來查找一個字符。如果字符存在就返回相應字符,如果不存在拋出異常KeyError。
>>> import unicodedata>>> print(unicodedata.lookup('LEFT CURLY BRACKET')){>>> print(unicodedata.lookup('LEFT'))Traceback (most recent call last): File "<stdin>", line 1, in <module>KeyError: "undefined character name 'LEFT'">>>
unicodedata.name(chr[,default])通過字符來查找它的名稱。如果成功返回相應名稱,否則拋出異常ValueError。
>>> import unicodedata>>> print(unicodedata.name('{'))LEFT CURLY BRACKET>>> print(unicodedata.name('@'))COMMERCIAL AT>>> print(unicodedata.name('{{'))Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: name() argument 1 must be a unicode character, not str>>>
unicodedata.decimal(chr[, default])返回表示數字字符的數值。如果給一個沒有數字的值時,會拋出異常ValueError。
>>> import unicodedata>>> print(unicodedata.decimal('7'))7>>> print(unicodedata.decimal('7a'))Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: decimal() argument 1 must be a unicode character, not str>>>
unicodedata.digit(chr[, default])把一個合法的數字字符串轉換為數字值,比如0到9的字符串轉換為相應的數字值。如果非法的字符串,拋出異常ValueError。
>>> import unicodedata>>> print(unicodedata.digit('9', None))9>>> print(unicodedata.digit('9a', None))Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: digit() argument 1 must be a unicode character, not str>>>
unicodedata.numeric(chr[, default])把一個表示數字的字符串轉換為浮點數返回。比如可以把‘8’,‘四’轉換數值輸出。與digit()不一樣的地方是它可以任意表示數值的字符都可以,不僅僅限於0到9的字符。如果不是合法字符,會拋出異常ValueError。
>>> import unicodedata>>> print(unicodedata.numeric('四', None))4.0>>> print(unicodedata.numeric('8', None))8.0>>> print(unicodedata.numeric('8a', None))Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: numeric() argument 1 must be a unicode character, not str>>>
unicodedata.category(chr)把一個字符返回它在UNICODE裡分類的類型。具體類型如下:
Code Description
[Cc] Other, Control
[Cf] Other, Format
[Cn] Other, Not Assigned (no characters in the file have this property)
[Co] Other, Private Use
[Cs] Other, Surrogate
[LC] Letter, Cased
[Ll] Letter, Lowercase
[Lm] Letter, Modifier
[Lo] Letter, Other
[Lt] Letter, Titlecase
[Lu] Letter, Uppercase
[Mc] Mark, Spacing Combining
[Me] Mark, Enclosing
[Mn] Mark, Nonspacing
[Nd] Number, Decimal Digit
[Nl] Number, Letter
[No] Number, Other
[Pc] Punctuation, Connector
[Pd] Punctuation, Dash
[Pe] Punctuation, Close
[Pf] Punctuation, Final quote (may behave like Ps or Pe depending on usage)
[Pi] Punctuation, Initial quote (may behave like Ps or Pe depending on usage)
[Po] Punctuation, Other
[Ps] Punctuation, Open
[Sc] Symbol, Currency
[Sk] Symbol, Modifier
[Sm] Symbol, Math
[So] Symbol, Other
[Zl] Separator, Line
[Zp] Separator, Paragraph
[Zs] Separator, Space
>>> import unicodedata>>> print(unicodedata.category('四'))Lo>>> print(unicodedata.category('8'))Nd>>> print(unicodedata.category('a'))Ll>>>
unicodedata.bidirectional(chr)把一個字符給出它的分類,以便進行從左到右,還是從右到左的排列。如果沒有定義,返回空字符串。
>>> import unicodedata>>> print(unicodedata.bidirectional('9'))EN>>>>>> print(unicodedata.bidirectional(u'\u0660'))AN>>>>>> print(unicodedata.bidirectional('中'))L>>>>>> print(unicodedata.bidirectional('a'))L>>>>>> print(unicodedata.category(u'\u0660'))Nd>>>
其中EN表示English Number,AN表示Arabic Number,L表示Letter,Nd是表示Number Decimal。
unicodedata.combining(chr)把字符的權威組合值返回,如果沒有定義,默認是返回0。當正規化操作時,可以根據這個值進行排序,大的值排在小的值後面。
>>> import unicodedata>>> print(unicodedata.combining('9'))0>>>>>> print(unicodedata.combining('A'))0>>>
unicodedata.east_asian_width(chr)把字符顯示的寬度返回。具體內容如下:
‘F’(Fullwidth), ‘H’(Halfwidth), ‘W’(Wide), ‘Na’(Narrow), ‘A’(Ambiguous) or ‘N’(Natural).
>>> import unicodedata>>> print(unicodedata.east_asian_width('9'))Na>>>>>> print(unicodedata.east_asian_width('A'))Na>>>>>> print(unicodedata.east_asian_width('蔡'))W>>>
unicodedata.mirrored(chr)判斷一個字符是否支持鏡像屬性,如果支持返回1,否則返回0.
>>> import unicodedata>>> print(unicodedata.mirrored('9'))0>>>>>> print(unicodedata.mirrored('A'))0>>>>>> print(unicodedata.mirrored('蔡'))0>>>
unicodedata.decomposition(chr)把一個可分解的字符分成兩個16進制的值返回,如果不可分解,返回空。
>>> import unicodedata>>> print(unicodedata.decomposition('9'))>>>>>> print(unicodedata.decomposition('-'))>>>>>> print(unicodedata.decomposition('蔡'))>>>>>> print(unicodedata.decomposition('ガ'))30AB 3099>>>
unicodedata.normalize(form, unistr)把一串UNICODE字符串轉換為普通格式的字符串,具體格式支持NFC、NFKC、NFD和NFKD格式。一些文本元素即可以使用靜態的預先組合好的形式,也可使用動態組合的形式。Unicode字符的不同表示序列被認為是等價的。如果兩個或多個序列被認為是等價的,Unicode標准不規定哪一種特定的序列是正確的,而認為每一個序列只不過與其它序列等價。
如 果需要一種單一的單一的表示方式,可以使用一種規范化的Unicode文本形式來減少不想要區別。Unicode標准定義了四種規范化形式: Normalization Form D (NFD),Normalization Form KD (NFKD),Normalization Form C (NFC),和Normalization Form KC (NFKC)。大約來說,NFD和NFKD將可能的字符進行分解,而NFC和NFKC將可能的字符進行組合。
>>> import unicodedata>>> print(unicodedata.normalize('NFKD', u'aあä').encode('ascii', 'ignore'))b'aa'>>>>>> title = u"Klüft skräms inför på fédéral électoral große">>> print title.encode(‘ascii','ignore')Klft skrms infr p fdral lectoral groe#可以看到丟了許多的字符>>> import unicodedata >>> unicodedata.normalize('NFKD', title).encode('ascii','ignore') 'Kluft skrams infor pa federal electoral groe'
unicodedata.unidata_version返回當前Unicode使用的數據庫的版本。
unicodedata.ucd_3_2_0
提供ucd3.2的對象方式訪問,以便兼容舊的IDNA的應用程序。
>>> import unicodedata>>> print(unicodedata.unidata_version)9.0.0>>>>>> print(unicodedata.ucd_3_2_0)<unicodedata.UCD object at 0x00000215E3EA3B70>>>>
下面來仔細查看一個字符的UNICODE數據:
U+0062 is the Unicode hex value of the character Latin Small Letter B, which is categorized as “lowercase letter” in the Unicode 6.0 character table.
Unicode Character Information
Unicode Hex U+0062
Character Name LATIN SMALL LETTER B
General Category Lowercase Letter [Code: Ll]
Canonical Combining Class 0
Bidirectional Category L
Mirrored N
Uppercase Version U+0042
Titlecase Version U+0042
Unicode Character Encodings
Latin Small Letter B HTML Entity b (decimal entity), b (hex entity)
Windows Key Code Alt 0098 or Alt +00621
Programming Source Code Encodings Python hex: u”\u0062”, Hex for C++ and Java: “\u0062”
UTF-8 Hexadecimal Encoding 0x62
上面大多的函數都是針對這些數據信息進行查詢,並且返回相應的值。
以上就是python unicodedata模塊用法的詳細內容,更多關於python unicodedata模塊的資料請關注軟件開發網其它相關文章!