Java SE 6里提供了 java.util.IDN 类来自持IDNA,此类中提供了一些方法来把unicode编码的域名转换成与ASCII码兼容的域名,这些方法是: toASCII 和 toUnicode 。应用程序在和DNS或者是名称定位服务打交道前,需用 toASCII 方法把域名转换到ASCII码;反过来,使用方法 toUnicode 创建用户可见的 unicode 文本。
如果在应用程序里输入非ASCII字符集的域名,程序在把数据发送到国际互联网前需要做如下工作:
// 获取应用程序界面上的输入
String strUnicodeName = txtUnicodeName.getText();
// 转换成与ASCII兼容的编码
String strACEName = IDN.toASCII(strUnicodeName);
如图,使用日本语的域名,变量 strACEName 保存了文本 “xn--wgv71a119e.jp”
“xn--wgv71a119e.jp”这样的文本谁也读不懂,因为这是对字符编码后的样子,只有对计算机和应用程序有用。可以用下面代码演示如何把这样的字符转变为人能读懂的文本:
String strACEName = txtACEName.getText();
String strUnicodeName = IDN.toUnicode(strACEName);
日本国的日历
---------------
日本人常使用两种纪年方式:国际上的公元纪年法和他们本国的年号纪年法。几乎所有人都会用公元纪年法,然而日本政府在日常习俗和文件中还常使用年号纪年法。年号纪年法依据天皇在位的时间来定义。
JAVA编程中使用 java.util.Calendar.getInstance 方法来获取日历对象的实例。通过像演示代码中那样的方式来使用日本国的年号纪年法:
Calendar calJapanese = Calendar.getInstance(new Locale("ja", "JP", "JP"));
在创建了 Calendar 对象实例后就可在其上使用基于年号纪年法的日期设置,获取以及组装。
公元纪年法和年号纪年法一个明显区别就是在格式化日期上。java.text.SimpleDateFormat和 java.text.DateFormat 类为新的日历格式提供了支持,可向下面代码演示的那样来对日期格式化和显示:
Date now = new Date();
Locale localeJapanese = new Locale("ja", "JP");
Locale localeImperialJapanese = new Locale("ja", "JP", "JP");
DateFormat dfGregorian = DateFormat.getDateInstance(DateFormat.FULL, localeJapanese);
DateFormat dfImperial = DateFormat.getDateInstance(DateFormat.FULL, localeImperialJapanese);
String strGregorianDate = dfGregorian.format(now);
String strImperialDate = dfImperial.format(now);
txtGregorianDate.setText(strGregorianDate);
txtImperialDate.setText(strImperialDate);
对 locale 设置了使用 “ja_JP” 后,DateFormat 就用日文字符来表示年月日的格式化结果。如果对 locale 设置了使用 “ja_JP_JP” ,DateFormat 就会输出年号纪年法格式化的日期字符串。如下图所示:
新增locales
--------------
在 Java SE 6 里,在现有支持的LOCALE基础上又新添了许多 locale 以支持不同的区域相关类。区域相关的数据来源于 CLDR (http://unicode.org/cldr/),尽管新的区域相关数据被引入了很多,但是不影响以前就存在的那些区域相关的对象。下表列出了 Java SE 6 里新添加了的区域对象
Chinese (Simplified) Singapore zh_SG
English Malta en_MT
English Philippines en_PH
English Singapore en_SG
Greek Cyprus el_CY
Indonesian Indonesia in_ID
Irish Ireland ga_IE
Japanese(Japanese Imperial calendar) Japan ja_JP_JP
Malay Malaysia ms_MY
Maltese Malta mt_MT
Serbian Bosnia and Herzegovina sr_BA
Serbian Serbia and Montenegro sr_CS
Spanish United States es_US
小结
------------
Java SE 6 向开发者敞开大门,让他们能对资源的定位和装载实现更多的控制,这样就使得JAVA平台对国际化的支持更广泛了,同样,也能使用区域相关的服务接口来支持未在JAVA SE 6中提供的区域数据。Normalizer 类不再是私有的了,它能把文本归一化到四种 unicode 标准格式: NFC,NFD,NFKC,NFKD。不用再把域名限制在ASCII编码集了,IDN类提供API来转换非ASCII域名到可用的兼容ASCII编码的域名服务和名称定位服务。新添加了支持日本国的年号纪年法的日期格式化。结束本文前,超过“一打”的新的区域对象已经可以被拿来使用了,这些区域对象的数据是从 CLDR 项目上获得的,这些新添加了的区域对象不会与现存对象冲突。
查看本文来源