java 多语言 香港_Java的多语言支持

《Java的多语言支持》由会员分享,可在线阅读,更多相关《Java的多语言支持(51页珍藏版)》请在人人文库网上搜索。

1、Java的多语言支持,区伟洪 2009年6月,大纲,字符集知识 JVM字符串支持 编译 运行时IO 相关JVM参数与API Properties文件与多语言设计模式,大纲,字符集知识 JVM字符串支持 编译 运行时IO 相关JVM参数与API Properties文件与多语言设计模式,字符集知识,对中文的支持 国标系列字符集: GB2312(简体) GBK(简体、繁体) GB18030(简体、繁体) 港澳台字符集: Big5(繁体) Unicode字符集: Unicode 注:UTF8、UTF16是存储和传输时的编码方式,字符集知识,对中文的支持 我行统一使用GBK 第三方系统有些使用Unic。

2、ode 案例:与人行相联的票据管理系统,字符集知识,对其他语言的支持 英语ASCII码 韩文EUC_KR (还有其他字符集) 日文EUC_JP (还有其他字符集) 西欧国家ISO-8859系列 (ASCII+制表符号形成ISO-8859-1字符集) (本地字符集统称为MBCS) Unicode字符集支持大部分语言,字符集知识,对其他语言的支持 我行开放平台上统一使用Unicode 第三方系统有些使用本地字符集 案例:阿拉木图项目 新终端上的打印等设备哈文特殊字符集RK1048 新终端使用Unicode,字符集知识,Unicode字符集的编码方式 UTF8、UTF16,还有UTF7、UTF32等。

3、 UCS2和UCS4 UTF8编码(以下是最佳表示方式,存在特例),大纲,字符集知识 JVM字符串支持 编译 运行时IO 相关JVM参数与API Properties文件与多语言设计模式,Java字符串支持,C语言字符串使用char*表示 在理解时,以字符串方式理解就是一个字符串 以数组方式理解,就是一个char数组 C语言字符串储存、传输时也是char* Java字符串使用String对象表示 在理解时,它的确是一个字符串 Java字符串需要转化为byte储存、传输,Java字符串支持,“汉字”这个字符串在不同情况下的表示 Java字符串:”汉字” Java byte:0 xBA, 0 xB。

4、A, 0 x76, 0 xD6(GBK) 0 xE6, 0 xB1 0 x89 0 xE5, 0 xAD, 0 x97(UTF8) C语言char*: 0 xBA, 0 xBA, 0 x76, 0 xD6(GBK) 0 xE6, 0 xB1 0 x89 0 xE5, 0 xAD, 0 x97(UTF8),Java字符串支持,String类,public final class String implements private char value; public String(byte bytes); public String(byte bytes, String charsetName)。

5、; public byte getBytes(String charsetName); public byte getBytes() ; ,Java字符串支持,从字符串得到byte ”汉字”.getBytes()得到 0 xBA, 0 xBA, 0 x76, 0 xD6(GBK) ”汉字”.getBytes(“UTF-8”)得到 0 xE6, 0 xB1 0 x89 0 xE5, 0 xAD, 0 x97(UTF8) 从byte得到字符串 new String(new byte0 xBA, 0 xBA, 0 x76, 0 xD6) 得到“汉字” new String(new byte0 xE6。

6、, 0 xB1 0 x89 0 xE5, 0 xAD, 0 x97, “UTF-8”) 得到“汉字”,大纲,字符集知识 JVM字符串支持 编译 运行时IO 相关JVM参数与API Properties文件与多语言设计模式,编译,编辑Java源文件时,以何种编码方式保存源文件,就要以何种编码方式编译 javac参数 -encoding,编译,以下面的程序进行测试,package test; public class StringTest public static void main(String args) System.out.println(测试); ,编译,为什么eclipse里不需关注。

7、编译时的encoding参数?,?,编译,eclipse的配置 编译时自动根据配置选择encoding参数,大纲,字符集知识 JVM字符串支持 编译 运行时IO 相关JVM参数与API Properties文件与多语言设计模式,运行时IO,JVM Unicode,外部环境,字节输出流,字节输入流,运行时IO,UI IO 控制台IO 注意操作系统环境 (显示不正确的可能是正确的) (显示正确的可能是不正确的) 图形IO 提供了getText(),不用关心编码,运行时IO,文件IO 使用InputStream、OutputStream读写文件时传递的是byte,转换为String时要注意编码问题,。

8、Unicode格式的文件可能有BOM的问题 使用PrintStream、BufferedReader时传递的是String,在构造对象时要注意编码问题,运行时IO,网络IO 传递的是byte 要注意交互双方的编码兼容 Java中传出的byte到了C语言的系统中就是char*,C语言的系统传出的char*到了JVM中就是byte,运行时IO,BS应用 IO request URL的内容 Body的内容 response Body的内容 JSP中指定编码,运行时IO,DB IO OracleNLS_LANG,自动适应 MySQLjdbc串中指定,大纲,字符集知识 JVM字符串支持 编译 运行时IO。

9、 相关JVM参数与API Properties文件与多语言设计模式,相关JVM参数与API,在纯Java应用程序里 -Dfile.encoding 在WAS环境里 -Dfile.encoding -Ddefault.client.encoding,相关JVM参数与API,-Dfile.encoding参数对String的影响,public final class String implements private char value; public String(byte bytes); public String(byte bytes, String charsetName); publi。

10、c byte getBytes(String charsetName); public byte getBytes() ; ,相关JVM参数与API,除String外,-Dfile.encoding参数还对BufferedReader产生影响,请参考其构造函数,相关JVM参数与API,如果启动JVM时没有指定file.encoding参数,对String等有什么影响?,?,相关JVM参数与API,启动JVM时没有指定file.encoding参数,则file.encoding使用操作系统默认的字符集,(表格中的情况在JDK5或以上版本生效,WAS6也生效),相关JVM参数与API,特殊情况,在。

11、Java1.4或以下版本 -Dfile.encoding 是未纳入到JDK标准中的,不是强制有效的,相关JVM参数与API,思考: new String(byte buf,String charSet) String.getBytes(String charSet) 在决定String和byte之间的转换所用的字符集时优先级最高(比file.encoding和操作系统的优先级高),以后编码时如何处理?其他API呢?,相关JVM参数与API,-Ddefault.client.encoding的情况更加复杂,与以下情况有关,HTTP请求的字符集编码按以下顺序确定 HTTP请求中是否包含字符集信息 。

12、default.client.encoding 服务器端操作系统的默认编码 (请自己做实验确认),相关JVM参数与API,-Ddefault.client.encoding相关的API HttpServletRequest setCharacterEncoding(String charSet); getParameter(String name); .URLEncoder encode(String src); / 不推荐使用 encode(String src, String charSet); .URLDecoder decode(String src); / 不推荐使用 decode(。

13、String src, String charSet);,相关JVM参数与API,-Ddefault.client.encoding特殊情况 设置了GBK 客户端发送的请求是UTF8编码,header中没有编码信息 使用HttpServletRequest.setCharacterEncoding设置UTF8 但无效,而只能直接对请求中的QueryString进行解码处理,大纲,字符集知识 JVM字符串支持 编译 运行时IO 相关JVM参数与API Properties文件与多语言设计模式,Properties文件与多语言设计模式,Properties文件是Java编程中常用的一种文本文件,后。

14、缀为.properties,每一行的内容为 KeyValue 的形式,其内容举例如下。,#管理端口 managePort=8899 #模拟交易所服务端口 listenPort=8003 #读客户端数据超时时间,毫秒 readTimeout=3000,Properties文件与多语言设计模式,Properties文件的编码只能为ISO-8859-1编码 中文字符不在ISO-8859-1字符集范围内,如何支持中文属性?,?,Properties文件与多语言设计模式,对有中文常量的class文件反编译 发现“测试”这个字符串在java源文件里也可以使用“u6D4Bu8BD5”来表示,package 。

15、test; import java.io.PrintStream; public class StringTest public static void main(String args) System.out.println(u6D4Bu8BD5); ,Properties文件与多语言设计模式,Java中,字符串中反义字符u后面的4个字符表示一个Unicode字符的十六进制内码,u加上后面4个字符表示一个Unicode字符。 如字符“A”的Unicode编码是十六进制41,则“A”在String对象中可用“u0041”或“A”表示,而中文的“测试”二字在String中可使用“u6D4Bu8B。

16、D5”或“测试”表示。,Properties文件与多语言设计模式,而uXXXX 这6个字符完全在ISO-8859-1的表示范围内 因此,我们可以在properties文件中使用u加十六进制Unicode内码的形式表示中文或其他语言的字符。,Properties文件与多语言设计模式,利用properties文件,我们可以设计多语言支持的Java程序 一个程序,多份语言文件,中文properties文件,Java程序,韩文properties文件,德文properties文件,Properties文件与多语言设计模式,如何改造现有的程序? 以下是现有程序的例子,/ 连接数据库 Logger.log。

17、(正在连接数据库.); try dbConnection.connect(); catch (Exception e) Logger.log (数据库连接失败,将不能执行交易!); ,Properties文件与多语言设计模式,改造后(1 of 3),Logger.log(Messages.getString(lang, DBConnection.0); try dbConnection.connect(); catch (Exception e) Logger.log (Messages.getString(lang, DBConnection.1); ,Properties文件与多语言设计模。

18、式,改造后(2 of 3),新建Messages类,提供getString(String lang, String msgId)方法,详细代码如下: public static String getString(String lang, String msgId) try ResourceBundle RESOURCE_BUNDLE = ResourceBundle .getBundle(“com.icbc.test.” + lang+ “.properties”); return RESOURCE_BUNDLE.getString(msgId); catch (MissingResource。

19、Exception e) return ! + msgId + !; ,Properties文件与多语言设计模式,改造后(3 of 3),资源文件的内容。 中文文件(ISO8859-1编码)com.icbc.test.zh_CN.properties: DBConnection.0= u6B63u5728u8FDEu63A5u6570u636Eu5E93. DBConnection.1=u6570u636Eu5E93u8FDEu63A5u5931u8D25uFF0Cu5C06u4E0Du80FDu6267u884Cu4EA4u6613uFF01 英文文件com.icbc.test.en_US.。

20、properties: DBConnection.0=Connecting DB DBConnection.1=Connecting DB fail, cant deal with trade!,Properties文件与多语言设计模式,eclipse提供了方便的操作方法 选中字符串常量 右键 源代码-外部化字符串,Properties文件与多语言设计模式,直接以文本方式编辑properties文件中的中文内容也比较麻烦 可使用eclipse中的properties文件辅助插件辅助编辑,Properties文件与多语言设计模式,思考,“一份程序多份资源文件”的多语言支持设计模式还有没有其他的实现方式?,?,End,交流时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值