【Java可移植性】编程规范每日一学--20130923

国际化

在所有的输入输出环节,指明正确的编码方式,进行正确的字符到字节,或字节到字符的转换
见如下示例 String newStr = new String(oldStr.getBytes("GBK"), "UTF-8");  
如果输入源或输出目标直接支持,尽可能直接使用Unicode进行输入输出。 说明:例如,Oracle数据库直接支持UTF-8的文本数据。使用UTF-8操作Oracle,可自动兼容所有的语言文字;反之,使用ISO-8859-1或者ASCII去操作Oracle,只能兼容欧美单字节的文字。 不要依赖平台默认的字符编码方式。
说明:例如,中文Windows下,默认的编码为GBK,英文linux下,默认编码为ISO-8859-1。依赖平台默认值意味着同样的程序在不同的平台上可能产生不同的结果。
对于使用默认编码方式的第三方代码或者遗留代码,可应用适配器模式,将返回的字符串转换成Unicode内码 说明:例如,我们的数据库错误的使用了ASCII编码存储文本,也就是说从数据库返回的中文字,实际上被“拆”成了两个欧洲字符。但是数据库中已经保存了大量数据,全改成Unicode表示不容易。 我们可以在数据访问层做一个适配器,将欧洲字符重新组合,变成真正的Unicode中文。

字符串大小写转换时,应加上Locale.US 说明:String类的toUpperCase()和toLowerCase()方法,如果不输入参数,则会按当前系统默认的编码模式转换,因此转换结果可能并非如你所预期,如下所示: 示例:
        不好:如果当前环境是土耳其Turkish,那最后输出的结果不是预期的大写I了,而是另外一个字符(İ)
String testString = "i";                System.out.println(testString.toUpperCase());      
推荐:字符串的大小写转换一般都是在26个英文字母,建议显示指定语言为Local.US String testString = "i";               System.out.println(testString.toUpperCase(Local.US));