国际统一码部件

求闻百科,共笔求闻

国际统一码部件(英语:International Components for Unicode,缩写:ICU,中文译名根据联盟官方译名[1])是成熟的C / C++Java库的开源项目的函式库,用于支援统一码 、软件国际化和软件全球化。 ICU 可广泛移植到许多操作系统和环境中。对于不同平台上,以及在 C、C++ 和 Java 软件的应用程序,它可以提供相同的结果。IBM和许多其他公司赞助、支持和使用它。 [2]ICU 项目也已成为统一码联盟技术委员。 ICU 提供以下服务: 统一码文本处理、完整字符属性和字符集转换; 统一码正则表达式;完整的统一码集;字符、单词和行边界;基于语言的定序和搜索;规范化、大小写转换和脚本音译;通过通用当地数据储存库(CLDR)提供全面的语言环境数据和资源包架构;多种日历时区;以及基于规则的日期、时间、数字、货币和消息的格式化和解析。 ICU过去曾为阿拉伯语、希伯来语、印度语和泰语提供复杂文字编排服务,但在第 54 版中已弃用,并在第 58 版中完全删除,取而代之的是HarfBuzz[3]

ICU 提供比 C 和 C++ 标准库更广泛的国际化设施。 ICU 67 支持Unicode 13.0并处理英国脱欧的问题。 ICU 64 支持Unicode 12.0 ,而 ICU 64.2 增加了对 Unicode 12.1 的支持,即当前日本令和时代的单一新符号(但对它的支持也已向后移植到 ICU 4.8.2 的旧 ICU 版本)。 ICU 58(支持 Unicode 9.0)是支持旧平台(如Windows XPWindows Vista )的最后一个版本。对AIXSolarisz/OS的支持在更高版本中也可能受到限制(即构建取决于编译器支持)。 [4]Windows 10版本 1703 起,ICU 已作为标准组件包含在Microsoft Windows[5]

ICU 过去一直使用UTF-16 ,但只有用于 Java;而 C/C++ 使用 UTF-8 [6],包括正确处理“非法 UTF-8”。 [7]

ICU 68 无法使用C++20编译器来编译[8],但 69.1 应该可以。

起源与发展

1996 年初,Taligent 并入 IBM 后,太阳微系统决定新的 Java 语言应该更好地支持国际化。由于 Taligent 拥有使用此类技术的经验并且地理位置接近,因此他们的 Text 和 International 小组被要求将国际类作为JDK 1.1 国际化API 贡献JDK[9]该代码的很大一部分仍然存在于java.text和java.util包中。 Java 的后续版本都添加了进一步的国际化功能。

然后,Java 国际化类被移植到 C++ 和 C [10],称为 ICU4C(“ICU for C”)的库的一部分。 ICU 项目还提供了 ICU4J(“ICU for Java”),它添加了标准 Java 库中不存在的功能。 ICU4C 和 ICU4J 非常相似,但并不完全相同;例如,ICU4C 包含正则表达式的 API,而 ICU4J 则没有。随着时间的推移,这两个框架都得到了增强,以支援统一码和通用当地数据储存库的新功能。

1999 年,ICU 以开源项目的方式发布,原名称为 IBM Classes for Unicode,后来更名为 International Components For Unicode。 [11]2016 年 5 月,ICU 项目加入统一码联盟成为其技术委员(ICU-TC),现在库源是以统一码许可来分发。 [12]

MessageFormat

MessageFormat 是 ICU 中的类别,它是一个格式化系统,允许使用任意数量的参数来控制复数形式( pluralselectordinal ),或使用更一般的选择-切换样式select )来处理如的语法。这些语句可以嵌套。 [13]ICU MessageFormat 是通过将复数和选择系统添加到Java SE中的同名系统而创建的。

另见

参考

外部链接