ICU(International Component for Unicode/Unicode国际化组件) 是 Unicode 支持、软件国际化、全球化的一个成熟的、广泛应用的库,是一个由 IBM 赞助、支持和使用的,基于"IBM公共许可证",用于支持软件国际化的开源项目。ICU 项目是 Unicode 联盟的技术委员会,由 IBM 和许多其他公司赞助、支持和使用。自 Windows 10 版本 1703 起,ICU 已作为 Microsoft Windows 的标准组件包含在内。
ICU 提供的函数实现了标准的 Unicode Collation Algorithm(UCA)以及许多文化调整功能。很容易将适当的 ICU 函数组合成一个 UDF(用户定义函数),从而让
DB2 可以充分利用 ICU 的排序支持。(DB2 for Linux, UNIX, and Windows 就是使用 ICU 库来实现在 Unicode 数据上支持的三种文化排序)此外,ICU 还提供了全面的区域数据和资源包架构、多个日历和
时区支持,以及基于规则的日期、时间、数字、货币和消息的格式化和解析。
这个库为 C 和 Java
编程语言提供了一整套操作 Unicode 数据的函数。这个库是在一种无限制的开放源码许可证下发布的,这使它可以在许多应用程序中使用。ICU 提供了广泛的国际化功能,包括 Unicode 文本处理、
字符属性和字符集转换、Unicode
正则表达式、字符、单词和行边界处理、区分语言的排序和搜索、规范化、大小写转换和脚本音译等。
ICU首先是由Taligent公司开发的,Taligent公司现在被合并为IBM公司全球化认证中心的Unicode研究组,然后ICU由IBM和开源组织合作继续开发,开源组织给与了ICU极大的帮助。开始ICU只有Java平台的版本,后来这个平台下的ICU类被吸纳入SUN公司开发的
JDK1.1,并在JDK以后的版本中不断改进。
C++和C平台下的ICU是由JAVA平台下的ICU移植过来的,移植过的版本被称为ICU4C(ICU for C),来支持这C/C++两个平台下的国际化应用。ICU 于 1999 年作为开源项目发布,名称为 IBM Unicode 类库。它后来被重新命名为 Unicode 国际组件库。2016 年 5 月,ICU 项目以技术委员会 ICU-TC 的身份加入了 Unicode 联盟,而库源现在根据 Unicode 许可证分发。
ICU 不断更新以支持最新的 Unicode 标准和区域数据。例如,ICU 73.2 针对 GB18030-2022 合规性支持进行了改进,ICU 74 更新到 Unicode 15.1,包括新
字符、表情符号、安全机制以及相应的 API 和实现。ICU 项目计划于 2024 年 4 月发布的未来 ICU 75 将需要
C++17 或 C11,具体取决于所使用的语言。ICU 历史上使用 UTF-16,并且仅在 Java 中仍然使用;而对于 C/C++,则支持 UTF-8,包括正确处理“非法 UTF-8”。
ICU 的一部分是 MessageFormat 类,这是一个格式化系统,允许任意数量的参数控制
复数形式(复数、选择
序数)或更通用的开关-case 样式选择(选择),例如语法性别。这些语句可以嵌套。ICU MessageFormat 是通过将复数和选择系统添加到 Java SE 中的同名系统来创建的。
使用 Boost.Locale 来替代与
C++ 一起使用 ICU,或直接使用 ICU,Boost.Locale 是 ICU 的 C++ 包装器(同时还允许其他后端)。声称使用它而不是直接使用 ICU 是因为“对 C++ 开发人员绝对不友好。它忽略了流行的 C++ 惯用法(STL、RTTI、异常等),而是主要模仿 Java API。”另一个声称,即 ICU 仅支持 UTF-16(因此是避免使用 ICU 的一个原因),现在不再成立,因为 ICU 现在还为 C 和
C++ 支持 UTF-8。