ICU (International Components for Unicode)是为软件应用提供Unicode和全球化支持的一套成熟、广泛使用的C/C 、Java和.NET 类库集,可在所有平台的C/C 、Java和C# 软件上获得一致的结果,用于支持软件国际化的开源项目, 软件开发者几乎可以使用ICU 解决任何国际化的问题,根据各地的风俗和语言习惯,实现对数字、货币、时间、日期、和消息的格式化、解析,对字符串进行大小写转换、整理、搜索和排序等功能。ICU的主页是http://www.icu-project.org/
ICU首先是由Taligent公司开发的,Taligent公司被合并为IBM公司全球化认证中心的Unicode研究组后,ICU由IBM和开源组织合作继续开发。开始ICU只有Java平台的版本,后来这个平台下的ICU类被吸纳入SUN公司开发的JDK1.1,并在JDK以后的版本中不断改进。C 和C平台下的ICU是由JAVA平台下的ICU移植过来的,移植过的版本被称为ICU4C,来支持这C/C 两个平台下的国际化应用。ICU4J和ICU4C区别不大,但由于ICU4C是开源的,并且紧密跟进Unicode标准,ICU4C支持的Unicode标准总是最新的;同时,因为JAVA平台的ICU4J的发布需要和JDK绑定,ICU4C支持Unicode标准改变的速度要比ICU4J快的多。在Linux 操作系统上,.NET Core 使用ICU的全球化API, 从 .NET 5.0 开始,如果应用在 Windows 10 2019 年 5 月更新或更高版本上运行,.NET 库将使用 ICU 全球化 API。.NET 5 统一使用ICU, 引入此更改的原因有两个:
- 应用跨平台(包括 Linux、macOS 和 Windows)具有相同的全球化行为。
- 应用可以通过使用自定义 ICU 库来控制全球化行为。
ICU的功能主要有:
- 代码页转换: 对文本数据进行Unicode、几乎任何其他字符集或编码的相互转换。ICU的转化表基于IBM过去几十年收集的字符集数据,在世界各地都是最完整的。
- 排序规则(Collation): 根据特定语言、区域或国家的管理和标准比较字数串。ICU的排序规则基于Unicode排序规则算法加上来自公共区域性数据仓库(Common locale data repository)的区域特定比较规则。
- 格式化: 根据所选区域设置的惯例,实现对数字、货币、时间、日期、和利率的格式化。包括将月和日名称转换成所选语言、选择适当缩写、正确对字段进行排序等。这些数据也取自公共区域性数据仓库。
- 时间计算: 在传统格里历基础上提供多种历法。提供一整套时区计算API。
- Unicode支持: ICU紧密跟进Unicode标准,通过它可以很容易地访问Unicode标准制定的很多Unicode字符属性、Unicode规范化、大小写转换和其他基础操作。
- 正则表达式: ICU的正则表达式全面支持Unicode并且性能极具竞争力。
- Bidi: 支持不同文字书写顺序混合文字(例如从左到右书写的英语,或者从右到左书写的阿拉伯文和希伯来文)的处理。
- 文本边界: 在一段文本内定位词、句或段落位置、或标识最适合显示文本的自动换行位置。
参考:
- https://docs.microsoft.com/zh-cn/dotnet/core/compatibility/globalization