在哪里可以找到可下载格式的12.1中所有137,929个命名Unicode字符

时间:2019-06-05 03:32:57

标签: database unicode

我已经下载了12.1.0个unicode数据,并且在文件UnicodeData.txt中只有32,841行,因此只有约30k个字符。我想知道其他105,088个字符在哪里,但我找不到它们。想知道它们是否在Unihan.zip中,还是在UCD.zip中。我似乎找不到此信息here

想知道我用什么文件来保存所有命名字符的数据库。

2 个答案:

答案 0 :(得分:6)

UnicodeData.txt中的某些条目是字符范围,如technical report中所述:

  

为了向后兼容,文件UnicodeData.txt中的范围是由该范围的开始和结束字符的条目指定的,而不是由形式“ X..Y”指定的。起始字符由范围标识符指示,后跟尖括号中的逗号和字符串“ First”。该条目代替该行的字段1中的常规字符名称。结束字符在下一行用相同的范围标识符表示,后跟尖括号中的逗号和字符串“ Last”:

4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
9FEF;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;

换句话说,UnicodeData.txt文件中的行数与数据库中的字符数不同。一些字符范围由仅用两行编码的成百上千个字符组成。

答案 1 :(得分:3)

@CraigBarnes是正确的,UnicodeData.txt包含所有字符。这是一些证明(Python代码):

import csv

D = {}

with open('UnicodeData.txt',encoding='utf-8-sig') as f:
    r = csv.reader(f,delimiter=';')
    for line in r:
        # Count all the CJK Ideograph and Hangul Syllable ranges and generate names
        if ('Ideograph' in line[1] or line[1].startswith('<Hangul')) and line[1].endswith('First>'):
            end = next(r)
            for i in range(int(line[0],16),int(end[0],16)+1):
                D[i] = [line[1][1:-8].upper() + '-' + f'{i:04X}'] + line[2:]
        elif line[1][0] == '<':
            continue # skip private use and control characters
        else:
            D[int(line[0],16)] = line[1:] # count everything else as one entry

print(len(D))

输出:

137929