在Unicode中,每种语言都有自己的数字表示方式。例如,ASCII使用“3”,日语使用“3”,等等。无论一个数字用哪个Unicode字节表示,我该如何识别它是一个“三”呢?
在Unicode中,每种语言都有自己的数字表示方式。例如,ASCII使用“3”,日语使用“3”,等等。无论一个数字用哪个Unicode字节表示,我该如何识别它是一个“三”呢?
阅读关于规范属性十进制数字值,数字值和数值的内容,UnicodeData文件格式中有相关信息:
例如,Python的十进制数字值 规范性描述 这是一个数字字段。如果字符具有十进制数字属性,如Unicode标准第4章中所指定的那样,则该数字的值将用该字段中的整数值表示。
数字值 规范性描述 这是一个数字字段。如果字符代表一个数字,不一定是十进制数字,则该值在此处。这包括不形成十进制基数形式的数字,例如兼容上标数字。
数值 规范性描述 这是一个数字字段。如果字符具有数值属性,如Unicode标准第4章中所指定的那样,则该字符的值将用该字段中的整数或有理数表示。这包括分数,例如U+2155 VULGAR FRACTION ONE FIFTH的“1/5”。还包括兼容字符的数值,例如圆形数字。
unicodedata
模块提供了访问Unicode字符数据库的功能,该数据库定义了所有Unicode字符的字符属性,请参见实现:unicodedata — Unicode Database:import unicodedata
numchars = '\u0033','\u00B3','\u0663','\u06F3','\u07C3','\u0969','\uFF13','\u2155'
for numchar in numchars:
print( numchar
, unicodedata.decimal( numchar, -1)
, unicodedata .digit( numchar, -1)
, unicodedata.numeric( numchar, -1)
, unicodedata .name( numchar, '? ? ?') )
输出:
==> D:\test\Python\Py3\41045800.py
3 3 3 3.0 数字三
³ -1 3 3.0 上标数字三
٣ 3 3 3.0 阿拉伯数字三
۳ 3 3 3.0 扩展阿拉伯数字三
߃ 3 3 3.0 NKO数字三
३ 3 3 3.0 梵文数字三
3 3 3 3.0 全角数字三
⅕ -1 -1 0.2 分数一五分之一
==>
P.S. 给出的 Python 示例,因为问题没有标记任何特定语言。