有个文件,包含'⻝' 11997 和食是相同的字,但是是不同的编码,
⻝ (U+2EDD)和 食 (U+98DF)的关系是:它们是同一个字的不同视觉表现形式,但 Unicode 指定 U+98DF 为标准形式,U+2EDD 为其异体形式(特别是作为部首时)。
问了一下 AI ,都是让枚举做一个 map ,有没有统一的转化这样汉字的方案,unicodedata.normalize 不行。
1
guoguobaba OP ```
import unicodedata import sys s = '⻝' print(f"Python 版本: {sys.version}") print(f"Unicode 版本: {unicodedata.unidata_version}") print(f"字符: '{s}'") print(f"Unicode: U+{ord(s):04X}") print(f"字符名称: {unicodedata.name(s, '未知')}") # 尝试不同的归一化形式 forms = ['NFC', 'NFD', 'NFKC', 'NFKD'] for form in forms: result = unicodedata.normalize(form, s) print(f"{form}: '{result}' (U+{ord(result):04X}) - 是否变化: {s != result}") ``` |
2
yuuluu 15 小时 10 分钟前
unicode 姿势 +1
目前知道的: 1. 字素组合字 2. 空白字符识别 |
3
zhmouV2 15 小时 10 分钟前 这个估计是没办法 只能查
https://util.unicode.org/UnicodeJsps/confusables.jsp 规范化分解应该是针对西文的,中文不行。 Unicode CJK 区的重复字符倒挺多的 |
4
newaccount 14 小时 59 分钟前
OCR 之后再跟原文比对?
|
5
guoguobaba OP @zhmouV2 http://www.unicode.org/Public/security/revision-03/confusablesSummary.txt 感谢,用这个创建一个 map 就可以了。
|
6
kanakana 14 小时 39 分钟前
还挺神奇的,U+2EDD (⻝)和 U+2F29 (⼩)都是康熙部首字符:
2F29;KANGXI RADICAL SMALL;So;0;ON;<compat> 5C0F;;;;N;;;;; 2FB7;KANGXI RADICAL EAT;So;0;ON;<compat> 98DF;;;;N;;;;; UnicodeData.txt 里面也都相应标出了 <compat> 的分解形式:一个是 U+5C0F (汉字的“小”),一个是 U+98DF (汉字的“食”),但是它们 NFKC normalize 的结果却不同: >>> f'U+{ord(unicodedata.normalize('NFKC', chr(0x2F29))):04X}' 'U+5C0F' (中文“小”) >>> f'U+{ord(unicodedata.normalize('NFKC', chr(0x2FB7))):04X}' 'U+2FB7' (仍然是康熙部首“⻝”) 感觉会不会是 Unicode 的问题……但无论如何,要想手动 normalize 的话应该把 UnicodeData.txt 里面的第六列提出来也可以。但例如 Firefox 用的似乎是 confusables.txt [1],比 UnicodeData 来说提供了更多基于字形的 normalization ,也可以考虑一下。 [1] https://github.com/unicode-org/icu/blob/main/icu4c/source/data/unidata/confusables.txt |
7
yuzii 14 小时 36 分钟前
一个中文、一个日文
|
8
kanakana 14 小时 36 分钟前
@kanakana 等下弄错了,楼主的是 CJK RADICAL EAT ONE ,这个的确没有 compat normalization ,必须要 confusables 了……
|
9
zoyopo 14 小时 29 分钟前
试了下 edge 的 ctrl+f 搜索 已经做过这个转换了 搜索‘食’可以搜索到其它两个变种
|
10
ratazzi 14 小时 26 分钟前
|
12
54xavier 11 小时 47 分钟前
|
13
kukuCode 11 小时 44 分钟前
我们做过一个 cad shx 格式字体转为 ttf 的项目。甲方自定义的特殊字符,可以通过映射的方式转到 ttf 中,或者你直接 svg 显示
|
14
tf2 11 小时 43 分钟前
这个 case 来看 cjk 统一是对的。。
|
16
Leon406 8 小时 20 分钟前
confusablesSummary 建议用 2025 的
https://www.unicode.org/Public/security/latest/confusablesSummary.txt |