确定unicode sub中是否存在unicode字符

2024-04-26 11:46:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我想找到一种方法来确定Unicode字符是否存在于Unicode字符的标准化子集中,特别是拉丁basic和拉丁-1。我正在使用python2和unicodedata模块,但是需要一个在3中也能工作的解决方案,因为我的工作很快就要升级了。你知道吗

我现在的想法是使用Unicode脚本.txt文件并将其解析为某种字典进行搜索。问题是该文件中Unicode代码的格式如下所示。你知道吗

02B9..02C1

python中的Unicode点是这样的

`u'\xe6'

我不知道如何比较这两件事。我猜它是十六进制的,Python的表示只是十六进制的另一种表示方式。你知道吗

我是否可以引用Unicode子集及其字符的现有JSON数据集?谷歌搜索一无所获。因为数据集相对较小,所以最好只从维基百科页面制作一个?你知道吗


Tags: 模块文件数据方法代码txt脚本字典
1条回答
网友
1楼 · 发布于 2024-04-26 11:46:45

02B9 .. 02C1是这些字符的十六进制码位。使用unicodedata.name可以得到他们的名字:

import unicodedata 
for i in range(int('02b9', 16), int('02c1', 16) + 1): 
    char = chr(i) 
    print(hex(i), char, unicodedata.name(char))  


0x2b9 ʹ MODIFIER LETTER PRIME
0x2ba ʺ MODIFIER LETTER DOUBLE PRIME
0x2bb ʻ MODIFIER LETTER TURNED COMMA
0x2bc ʼ MODIFIER LETTER APOSTROPHE
0x2bd ʽ MODIFIER LETTER REVERSED COMMA
0x2be ʾ MODIFIER LETTER RIGHT HALF RING
0x2bf ʿ MODIFIER LETTER LEFT HALF RING
0x2c0 ˀ MODIFIER LETTER GLOTTAL STOP
0x2c1 ˁ MODIFIER LETTER REVERSED GLOTTAL STOP

如果您想知道它们是否是拉丁语-1的子集,您可以try将它们转换为该(或任何其他)编码:

import unicodedata 
for i in range(int('02b9', 16), int('02c1', 16) + 1): 
    char = chr(i) 
    try:
        char.encode('latin1')
    except UnicodeEncodeError:
        print(char, False)
    else:
        print(char, True)

它们都将返回False,因为它们不是拉丁1的子集。你知道吗

相关问题 更多 >