【问题标题】:Where does glibc get its database of unicode attributes? [closed]glibc 从哪里获得其 unicode 属性数据库? [关闭]
【发布时间】:2023-03-26 21:46:02
【问题描述】:

glibc 从哪里获得它的 unicode 属性数据库,例如 wcwidth() 之类的函数?我有兴趣更正一些错误条目,但我似乎无法找到这些信息在其源分布中的位置。

如果重要的话,我主要对 debian 或 ubuntu linux 下的这个感兴趣。

【问题讨论】:

    标签: c linux open-source unicode glibc


    【解决方案1】:

    看起来数据是由(显然是手动运行的)localedata/gen-unicode-ctype.c 从http://unicode.org/Public/UNIDATA/ 发布的 unicode 数据文件生成的。感谢 Naaff 为我指明了正确的方向!

    【讨论】:

      【解决方案2】:

      好的,所以我只是在自己周围摸索,所以我不确定,但您要查找的表似乎位于以下相对于 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% 确定这是正确的桌子,但我想我会分享我发现的。

      【讨论】:

      • 该文件中的 cmets 表明它是由 localedata/gen-unicode-ctype.c 生成的,它涉及 UnicodeData 文件,但是 glibc 分发中使用的 UnicodeData 文件在哪里...?我不想修补生成的文件,看起来下次有新版本时它会变得很粘。
      • 嗯...这是一个很好的观点。您是否尝试过修改生成的文件,只是为了验证 wcwidth() 返回正确的值?这可能很有用,因为它将证明我们走在正确的道路上。然后我们可以花更多的精力找出文件是如何生成的,以便从根本上解决问题。
      • @bdonlan:他们是否更新了它以使用 Unicode 6.0.0 UnicodeData 文件重新运行它?也许它已在当前版本中修复。
      【解决方案3】:

      我相信它是在语言环境定义文件中定义的。有关语言环境的更多信息,请参阅this page。 glibc 在localedate/locales 中包含了一堆语言环境定义,尽管它们似乎都没有任何宽度信息。

      【讨论】:

      • 然而,语言环境是由 ... glibc 附带的 localedef 应用程序生成的。我对找到规范位置来编辑此信息更感兴趣...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-13
      • 1970-01-01
      • 2010-10-20
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多