3.5 unicodedata--Unicode数据库

来源:互联网 发布:思源网络教学支持系统 编辑:程序博客网 时间:2024/04/29 00:54

本库主要提供访问UCD相关内容的库。UCDUnicode字符数据库(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

例子:

#python 3.4.3

 

import unicodedata

print(unicodedata.lookup('LEFT CURLY BRACKET'))

结果输出如下:

>>> 

{

>>> 

 

unicode.name(chr[,default])

通过字符来查找它的名称。如果成功返回相应名称,否则抛出异常ValueError

例子:

#python 3.4.3

 

import unicodedata

 

print(unicodedata.name('{'))

结果输出如下:

>>> 

LEFT CURLY BRACKET

>>> 

 

unicodedata.decimal(chr[, default])

返回表示数字字符的数值。如果给一个没有数字的值时,会抛出异常ValueError

例子:

#python 3.4.3

 

import unicodedata

 

print(unicodedata.decimal('7'))

结果输出如下:

>>> 

7

>>> 

 

unicodedata.digit(chr[, default]) 

把一个合法的数字字符串转换为数字值,比如09的字符串转换为相应的数字值。如果非法的字符串,抛出异常ValueError

例子:

#python 3.4.3

 

import unicodedata

 

print(unicodedata.digit('9', None))

结果输出如下:

>>> 

9

>>> 

 

unicodedata.numeric(chr[, default])

把一个表示数字的字符串转换为浮点数返回。比如可以把‘8’,‘四’转换数值输出。与digit()不一样的地方是它可以任意表示数值的字符都可以,不仅仅限于09的字符。如果不是合法字符,会抛出异常ValueError

例子:

#python 3.4.3

 

import unicodedata

 

 

print(unicodedata.numeric('', None))

print(unicodedata.numeric('8', None))

结果输出如下:

>>> 

4.0

8.0

>>> 

 

unicodedata.category(chr)  

把一个字符返回它在UNICODE里分类的类型。具体类型如下:

CodeDescription

[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

例子:

#python 3.4.3

 

import unicodedata

 

 

print(unicodedata.category(''))

print(unicodedata.category('8'))

print(unicodedata.category('a'))

结果输出如下:

>>> 

Lo

Nd

Ll

>>> 

 

unicodedata.bidirectional(chr) 

把一个字符给出它的分类,以便进行从左到右,还是从右到左的排列。如果没有定义,返回空字符串。

例子:

#python 3.4.3

 

import unicodedata

 

 

print(unicodedata.bidirectional('9'))

print(unicodedata.bidirectional(u'\u0660'))

print(unicodedata.bidirectional(''))

print(unicodedata.bidirectional('a'))

print(unicodedata.category(u'\u0660'))

结果输出如下:

>>> 

EN

AN

L

L

Nd

>>> 

其中EN表示English NumberAN表示Arabic NumberL表示LetterNd是表示Number Decimal

 

unicodedata.combining(chr)

把字符的权威组合值返回,如果没有定义,默认是返回0。当正规化操作时,可以根据这个值进行排序,大的值排在小的值后面。

例子:

#python 3.4.3

 

import unicodedata

 

 

print(unicodedata.combining('9'))

print(unicodedata.combining('A'))

结果输出如下:

>>> 

0

0

>>> 

 

unicodedata.east_asian_width(chr) 

把字符显示的宽度返回。具体内容如下:

'F'(Fullwidth), 'H'(Halfwidth), 'W'(Wide), 'Na'(Narrow), 'A'(Ambiguous) or 'N'(Natural).

例子:

#python 3.4.3

 

import unicodedata

 

 

print(unicodedata.east_asian_width('9'))

print(unicodedata.east_asian_width('A'))

print(unicodedata.east_asian_width(''))

结果输出如下:

>>> 

Na

Na

W

>>> 

 

unicodedata.mirrored(chr) 

判断一个字符是否支持镜像属性,如果支持返回1,否则返回0.

例子:

#python 3.4.3

 

import unicodedata

 

 

print(unicodedata.mirrored('9'))

print(unicodedata.mirrored('A'))

print(unicodedata.mirrored(''))

结果输出如下:

>>> 

0

0

0

>>> 

 

unicodedata.decomposition(chr) 

把一个可分解的字符分成两个16进制的值返回,如果不可分解,返回空。

例子:

#python 3.4.3

 

import unicodedata

 

 

print(unicodedata.decomposition('9'))

print(unicodedata.decomposition('-'))

print(unicodedata.decomposition(''))

print(unicodedata.decomposition(''))

结果输出如下:

>>> 

 

 

 

30AB 3099

>>> 

 

unicodedata.normalize(form, unistr) 

把一串UNICODE字符串转换为普通格式的字符串,具体格式支持NFCNFKCNFDNFKD格式。一些文本元素即可以使用静态的预先组合好的形式,也可使用动态组合的形式。Unicode字符的不同表示序列被认为是等价的。如果两个或多个序列被认为是等价的,Unicode标准不规定哪一种特定的序列是正确的,而认为每一个序列只不过与其它序列等价。 

如 果需要一种单一的单一的表示方式,可以使用一种规范化的Unicode文本形式来减少不想要区别。Unicode标准定义了四种规范化形式: Normalization Form D (NFD)Normalization Form KD (NFKD)Normalization Form C (NFC),和Normalization Form KC (NFKC)。大约来说,NFDNFKD将可能的字符进行分解,而NFCNFKC将可能的字符进行组合。

例子:

#python 3.4.3

 

import unicodedata

 

print(unicodedata.normalize('NFKD', u'aä').encode('ascii', 'ignore'))

结果输出如下:

>>> 

b'aa'

>>> 

 

unicodedata.unidata_version 

返回当前Unicode使用的数据库的版本。

unicodedata.ucd_3_2_0 

提供ucd3.2的对象方式访问,以便兼容旧的IDNA的应用程序。

例子:

#python 3.4.3

 

import unicodedata

 

print(unicodedata.unidata_version)

print(unicodedata.ucd_3_2_0)

结果输出如下:

>>> 

6.3.0

<unicodedata.UCD object at 0x029B77E8>

>>> 

 

下面来仔细查看一个字符的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 HexU+0062

Character NameLATIN SMALL LETTER B

General CategoryLowercase Letter [Code: Ll]

Canonical Combining Class0

Bidirectional CategoryL

MirroredN

Uppercase VersionU+0042

Titlecase VersionU+0042

Unicode Character Encodings

Latin Small Letter B HTML Entityb (decimal entity), b (hex entity)

Windows Key CodeAlt 0098 or Alt +00621

Programming Source Code EncodingsPython hex: u"\u0062", Hex for C++ and Java: "\u0062"

UTF-8 Hexadecimal Encoding0x62

上面大多的函数都是针对这些数据信息进行查询,并且返回相应的值。

 



蔡军生  QQ:9073204  深圳

0 0
原创粉丝点击