首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Unicode 及编码方式概述-4

Unicode 及编码方式概述-4

ICU 及 ICU4JICU (International Components for Unicode) 是一套成熟的、功能强大、易用和跨平台支持 Unicode 标准的                C/C++和 Java 库,为软件应用程序提供 Unicode 和全球化支持。 并且是开放源代码的,IBM 与开源组织合作研究,由 IBM                发布和维护。软件开发者很容易利用 ICU                解决任何软件全球化的问题,根据各地的风俗语言习惯,实现对数字、货币、时间、日期等格式化和解析;对字符串进行转换、搜索和排序等功能,此外,ICU                也提供了对双向字符串(BIDI)算法,对如阿拉伯语和希伯来语有很好的支持。ICU 分为 ICU4C 和 ICU4J,分别对应 Java 和                C/C++平台。
对于 Java 应用程序,ICU4J 逐渐取代了 JDK 提供的相关功能,因为 ICU4J 提供了更多的功能,如基于 CLDR 数据库的 Locale                信息、最新 Unicode 标准的参考实现、实时的版本更新以及较高的性能。最新的 ICU4J 版本是 60.2,对最新的 Unicode 标准                Unicode 10.0,CLDR 32 有很好的支持,并且在 Java 9 上进行了测试,用于数字格式化的新 API 更加注重于可用性,健壮性,表                4 列出了 ICU4J 提供的常用功能及其 API。
表 4. ICU4J                    功能列表功能列表功能介绍API
Unicode 文本
                            处理  支持                            Unicode 标准规定中的所有 Unicode 字符属性
UCharacter,                            UCharacter,UnicodeBlock  排序&查找                                                        根据特定语言,地区或国家的惯例和标准比较字符串。ICU 的排序规则是基于 Unicode 排序算法以及来自 Common                            Locale Data Repository 的语言环境特定比较规则  CollationElementIterator,                            Collator
RuleBasedCollator  基于 CLDR 库的                            Locale  Unicode                            通用语言环境数据存储库。由 Unicode 联合会(http://www.unicode.org/cldr/)维护的 XML                            格式的语言环境数据库。该存储库提供软件产品本地化所需的信息,包括日期,时间,数量和货币格式; 排序,搜索和匹配信息;                            并翻译了语言,地区,脚本,货币和时区的名称。像苹果、谷歌、IBM、微软、Oracle 等等很多公司都在使用  ULocale  Resource                            Bundles  资源文件管理  UResourceBundle  日历&时区                                                        在传统的公历日历之外提供了多种类型的日历。提供了一套完整的时区计算 API,比如中国的农历等;  Calendar, GregorianCalendar,                            SimpleTimeZone, TimeZone  Bidi                             支持处理包含从左到右(英文)和从右到左(阿拉伯文或希伯来文)数据混合的文本  Bidi  Unicode 正则
                            表达式  ICU 的正则表达式完全支持                            Unicode,同时提供非常有竞争力的性能                             UnicodeMatcher  文本边界                             在文本范围内查找单词,句子,段落的位置,或在显示文本时标识适合换行的位置  BreakIterator,                            StringCharacterIterator, StringTokenizer  格式化:时间&日期                                                        根据所选语言环境的风俗习惯格式化数字,日期,时间和货币金额,以及时间日期的缩写等  DateFormat, DateFormat.Field,                            DateFormatSymbols, SimpleDateFormat  格式化:数字&货币                           
Currency,                            DecimalFomat, DecimalFormatSymbols, NumberFormat,                            NumberFormat.Field  文本转换:规范化                            Normalization  将 Unicode                            文本转成等价的规范化格式内容,从而更好的进行比较排序等  Normalizer  大小写转换  大小写转换  CaseInsensitiveString  代码页转换和                            Transliterations  将文本数据转换为                            Unicode 或其他字符集或编码。ICU 的转换表基于 IBM 在过去几十年中收集的字符集数据,相对是最全面的。                             Transliterator
                            CharsetICU
CharsetEncoderICU
CharsetDecoderICU                        
下面将基于项目实践,列出几个 ICU4J API 应用实例。在支持多语言的应用程序中,根据用户 Locale                对日期时间的显示和解析是最基本的功能。清单 1 是 Java 和 ICU4J 中时间日期格式化显示对比。
清单 1.                Java 和 ICU4J 中的时间日期格式化               
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
private static void DateTimeFormat() throws ParseException {
    Date date = new Date(1234567890L);
    Locale locale = Locale.CHINA;
    //ICU4J DateFormat
    DateFormat dateFormatShort =
    com.ibm.icu.text.DateFormat.getDateTimeInstance(
    DateFormat.SHORT, DateFormat.SHORT, locale);
    DateFormat dateFormatMedium =
    com.ibm.icu.text.DateFormat.getDateTimeInstance(
    DateFormat.MEDIUM, DateFormat.MEDIUM, locale);
    DateFormat dateFormatLong =
    com.ibm.icu.text.DateFormat.getDateTimeInstance(
    DateFormat.LONG, DateFormat.LONG, locale);
    DateFormat dateFormatFull =
    com.ibm.icu.text.DateFormat.getDateTimeInstance(
    DateFormat.FULL, DateFormat.FULL, locale);
    //Java DateFormat
    java.text.DateFormat javaDateFormatShort =
        java.text.DateFormat.getDateTimeInstance(
    DateFormat.SHORT, DateFormat.SHORT, locale);
        DateFormat javaDateFormatMedium =
    java.text.DateFormat.getDateTimeInstance(
        DateFormat.MEDIUM, DateFormat.MEDIUM, locale);
    java.text.DateFormat javaDdateFormatLong =
        java.text.DateFormat.getDateTimeInstance(
    DateFormat.LONG, DateFormat.LONG, locale);
        java.text.DateFormat javaDateFormatFull =
    java.text.DateFormat.getDateTimeInstance(
        DateFormat.FULL, DateFormat.FULL, locale);
    String icu_Short = dateFormatShort.format(date);
    String icu_Medium = dateFormatMedium.format(date);
    String icu_long = dateFormatLong.format(date);
    String icu_full = dateFormatFull.format(date);
    String java_Short = javaDateFormatShort.format(date);
    String java_Medium = javaDateFormatMedium.format(date);
    String java_long = javaDdateFormatLong.format(date);
    String java_full = javaDateFormatFull.format(date);
    System.out.println("Java 和 ICU4J 中的时间日期格式化: \nAPI\t Short 格式\t\t Medium
    格式\t\t\tLong 格式\t\t\t\tFull 格式");
    System.out.println("=====\t=========\t\t============\t\t\t================\t\t====================");
    System.out.println("ICU4J\t" + icu_Short + "\t" + icu_Medium +"\t\t" +
    icu_long +"\t" + icu_full);
    System.out.println("Java \t" + java_Short + "\t\t" + java_Medium +"\t\t" +
    java_long +"\t" + java_full);
}




图 9. Java 和                    ICU4J 中的时间日期格式化
返回列表