【发布时间】:2023-03-26 21:46:02
【问题描述】:
glibc 从哪里获得它的 unicode 属性数据库,例如 wcwidth() 之类的函数?我有兴趣更正一些错误条目,但我似乎无法找到这些信息在其源分布中的位置。
如果重要的话,我主要对 debian 或 ubuntu linux 下的这个感兴趣。
【问题讨论】:
标签: c linux open-source unicode glibc
glibc 从哪里获得它的 unicode 属性数据库,例如 wcwidth() 之类的函数?我有兴趣更正一些错误条目,但我似乎无法找到这些信息在其源分布中的位置。
如果重要的话,我主要对 debian 或 ubuntu linux 下的这个感兴趣。
【问题讨论】:
标签: c linux open-source unicode glibc
看起来数据是由(显然是手动运行的)localedata/gen-unicode-ctype.c 从http://unicode.org/Public/UNIDATA/ 发布的 unicode 数据文件生成的。感谢 Naaff 为我指明了正确的方向!
【讨论】:
好的,所以我只是在自己周围摸索,所以我不确定,但您要查找的表似乎位于以下相对于 glibc 根目录的位置:
localedata/locales/i18n
这似乎是 Unicode(第 5 版)语言环境。它包含以下内容,我认为您需要在其中进行更改:
% ENCLOSED ALPHANUMERICS/
<U24D0>..<U24E9>;/
如果您想知道,函数 ctype_output (ld-ctype.c) 调用 allocate_arrays,后者调用 wcwidth_table_init。函数 wcwidth_table_init 由 3level.h 生成(它还生成遵循相同模板的其他表)。这是我跟踪 localedate/locales 中文件的链条。
就像我说的,我不能 100% 确定这是正确的桌子,但我想我会分享我发现的。
【讨论】:
我相信它是在语言环境定义文件中定义的。有关语言环境的更多信息,请参阅this page。 glibc 在localedate/locales 中包含了一堆语言环境定义,尽管它们似乎都没有任何宽度信息。
【讨论】: