我已经下载了12.1.0个unicode数据,并且在文件UnicodeData.txt
中只有32,841行,因此只有约30k个字符。我想知道其他105,088个字符在哪里,但我找不到它们。想知道它们是否在Unihan.zip
中,还是在UCD.zip
中。我似乎找不到此信息here。
想知道我用什么文件来保存所有命名字符的数据库。
答案 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