- 浏览: 304035 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (167)
- <HTML and JavaScript and CSS> (6)
- 《Java2 基础知识及概念》 (3)
- Java2 Tools及其他 (11)
- EJB2.0 相关 (3)
- 英语学习 (4)
- Oracle Database Server (27)
- 计算机理论 (9)
- Java持久层框架 (2)
- 《Linux操作系统》 (24)
- 杂项技术 (4)
- Application Server (15)
- Windows操作系统 (7)
- Java中间件 (6)
- 娱乐生活 (4)
- 《Java设计模式》 (3)
- 《Interview Skill》 (1)
- 《Struts原理及应用》 (1)
- Workflow (2)
- 云计算 (3)
- 项目实践 (3)
- WEB相关技术 (10)
- JavaScript技巧及应用 (1)
最新评论
一般攻略
既然在Java内部是直接使用Unicode表示一切字符的,表达中文自然不成问题。因此所谓的中文问题并不是由Java本身引起的。而是因为对Java和Unicode理解不透或应用不当引起的。下面列出的原则,是解决一切中文问题的总纲:
- 在Java内部,正确使用Unicode标准。对于中文来说,每个汉字使用一个char表示。
- 在所有的输入输出环节,指明正确的编码方式,进行正确的字符到字节,或字节到字符的转换。
- 如果输入源或输出目标直接支持,尽可能直接使用Unicode进行输入输出。例如,Oracle数据库直接支持UTF-8的文本数据。使用UTF-8操作Oracle,可自动兼容所有的语言文字;反之,使用ISO-8859-1或者ASCII去操作Oracle,只能兼容欧美单字节的文字。
- 不要依赖平台默认的字符编码方式。例如,中文Windows下,默认编码为GBK,英文Linux下,默认编码为ISO-8859-1。依赖平台默认值意味着同样的程序在不同的平台上可能产生不同的结果。
遗留代码攻略
对于第三方的代码,或是以前遗留的代码,如果没有留有指定字符编码的接口,那么这些代码很可能使用默认的系统编码,或是使用固定的字符编码。这样很容易造成上述的各种中文乱码的问题。对于这些代码,我们可以做一个适配器,将它们返回的字符串转换成适当的Unicode内码。
例如,我们的数据库错误地使用了ASCII编码存储文本,也就是说从数据库返回的中文字,实际上被“拆”成了两个欧洲字符。但是数据库中已经保存了大量数据,想要把它改成正确的UTF-8存储格式并不容易。作为权宜之计,我们可以在数据访问层做一个适配器,将欧洲字符重新组合,变成真正的Unicode中文。
WEB
应用攻略
除了Unicode以外,无论何种本地字符集,都不能代表所有字符。这将导致一些问题:
- 难以在一屏幕显示多种语言的文字。
- 解码用户表单困难。
我们知道浏览器是根据当前页面的content type中指定的字符编码来发送用户的表单输入的。假设当前页面的content type为text/html; charset=GBK,则当用户按下submit按钮提交表单时,浏览器自动将用户输入的字符以GBK方式编码并发回到服务器端。假设页面的content type为text/html; charset=BIG5,则用户的输入将以BIG5繁体中文的编码发送。但是,如果用户输入的字符超过了这个编码字符集的范围,会怎样呢?我们可以写一个简单的JSP做试验:
上述页面是用BIG5
显示的。在文本框中打入简体中文字“我爱”,然后submit。在结果页面中,我们可以看到“我”被转换成了BIG5编码DAA7,而简体中文“爱”在BIG5中没有对应的编码,因此被浏览器直接以爱的形式返回。其中29233是简体中文“爱”的十进制Unicode码。
可见浏览器会把超出当前字符集的字符,以实体编码的形式(如爱),直接返回给服务器端。Java servlet并不会自动处理这样的输入值,这给进一步处理字符串造成了困难。
为什么不直接使用UTF-8作为WEB页面的编码呢?这样不仅可以让全世界的文字同时显示在同一屏幕上(只要安装了相应的字体),也大大简化了解码用户表单的工作(不需要处理爱这样的实体编码)。但使用UTF-8也会带来一些微小的不便:
- 一个中文需要用三个字节表示,稍微增加了网页的大小。但多数网页中的中文字的数量是非常用限的,因而字节数的增加也是非常有限的。例如Alibaba中文站的首页面,改成UTF-8以后,比GBK编码的页面仅仅增加了1413个字节。
- 使用不支持UTF-8的编辑器查看页面将看到“乱码”。但我们可以使用支持UTF-8的文本编辑器来查看页面的HTML源代码。此外,使用UTF-8编码WEB页面并非意味着用来生成WEB页面的模板也必须使用UTF-8。仍然可以使用GBK来书写WEB页面模板。
根据上面的讨论,我们得到如下最佳攻略:
1. 使用UTF-8作为WEB页面的编码。使用如下语句设置content type:
并且在 对于 Turbine
2. 仍然可以使用GBK来书写页面模板。对于以Velocity为模板系统的Turbine,需要在Turbine的配置文件中设置:
模板的内容将以GBK
3. 使用UTF-8解码用户输入的表单。有几种方式可以达到这个目的:
-
- 设置服务器特定的配置文件。对于Resin Server,需要在其配置文件resin.conf中设置:<web-app character-encoding="UTF-8"/>;对于Weblogic Server,需要设置WEB-INF/weblogic.xml配置文件,具体方法参见BEA文档。
o 创建一个javax.servlet.Filter,在servlet被调用前,调用request.setCharacterEncoding方法:
o
-
request.setCharacterEncoding("UTF-8");
Java Mail攻略
- request.setCharacterEncoding("UTF-8");
和WEB应用完全类似,使用Java Mail API同样需要设置正确的content type和字符编码。
值得注意的是,RFC 822
发表评论
文章已被作者锁定,不允许评论。
-
《java多线程学习-java.util.concurrent详解》
2011-03-31 06:27 1595执行框程序(Executor):最 ... -
《浅谈java.util.concurrent包的并发处理》
2011-03-30 23:55 1326java.util.concurrent下主要的接口和类: ... -
《中文化和国际化问题(3)--Java中文问题分析》
2010-08-11 22:22 1323章从实际的中文问题中,分析问题的根本原因,以及解决之道。 ... -
《中文化和国际化问题(2)--Java国际化基础》
2010-08-04 23:04 1144Java的字符类型 和C语言不同,Java的字符类型“c ... -
字符,字节和编码
2010-08-03 08:00 824http://www.360doc.com/relevant/ ... -
《中文化和国际化问题(1)--字符编码发展历程》
2010-08-03 07:43 1278作者序 在我开发 Java ... -
《利用JDK中自带的native2ascii进行unicode和字符的互转》
2010-08-03 07:12 937中文转UNICODE(srcFileName为中文文件路径) ... -
《DatabaseMetaData和ResultSetMetaData用法实例》
2009-03-02 15:55 3636有关DatabaseMetaData的用法 一 、得到这个 ... -
《Base64编码和解码》
2009-02-11 10:19 1221import sun.misc.BASE64Encoder; ... -
《DES对称加密的实现及其源代码》
2009-02-11 10:04 1535package util; import javax.c ...
相关推荐
赠送jar包:lz4-java-1.8.0.jar; 赠送原API文档:lz4-java-1.8.0-javadoc.jar; 赠送源代码:lz4-java-1.8.0-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:lz4-java-1.4.1.jar; 赠送原API文档:lz4-java-1.4.1-javadoc.jar; 赠送源代码:lz4-java-1.4.1-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:lz4-java-1.4.0.jar; 赠送原API文档:lz4-java-1.4.0-javadoc.jar; 赠送源代码:lz4-java-1.4.0-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:lz4-java-1.6.0.jar; 赠送原API文档:lz4-java-1.6.0-javadoc.jar; 赠送源代码:lz4-java-1.6.0-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:weixin-java-miniapp-3.5.0.jar; 赠送原API文档:weixin-java-miniapp-3.5.0-javadoc.jar; 赠送源代码:weixin-java-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:weixin-java-mp-3.5.0.jar; 赠送原API文档:weixin-java-mp-3.5.0-javadoc.jar; 赠送源代码:weixin-java-mp-3.5.0-sources...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:weixin-java-miniapp-2.8.0.jar; 赠送原API文档:weixin-java-miniapp-2.8.0-javadoc.jar; 赠送源代码:weixin-java-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:aws-java-sdk-core-1.11.939.jar 赠送原API文档:aws-java-sdk-core-1.11.939-javadoc.jar 赠送源代码:aws-java-sdk-core-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:weixin-java-cp-2.8.0.jar; 赠送原API文档:weixin-java-cp-2.8.0-javadoc.jar; 赠送源代码:weixin-java-cp-2.8.0-sources...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:aws-java-sdk-s3-1.11.939.jar 赠送原API文档:aws-java-sdk-s3-1.11.939-javadoc.jar 赠送源代码:aws-java-sdk-s3-1.11....人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:mysql-binlog-connector-java-0.21.0.jar; 赠送原API文档:mysql-binlog-connector-java-0.21.0-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:weixin-java-mp-2.8.0.jar; 赠送原API文档:weixin-java-mp-2.8.0-javadoc.jar; 赠送源代码:weixin-java-mp-2.8.0-sources...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:aliyun-java-sdk-core-4.3.9.jar; 赠送原API文档:aliyun-java-sdk-core-4.3.9-javadoc.jar; 赠送源代码:aliyun-java-sdk-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:aliyun-java-sdk-dysmsapi-1.1.0.jar; 赠送原API文档:aliyun-java-sdk-dysmsapi-1.1.0-javadoc.jar; ...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:flink-table-api-java-bridge_2.11-1.12.7.jar; 赠送原API文档:flink-table-api-java-bridge_2.11-1.12.7-javadoc.jar; 赠送源代码:flink-...人性化翻译,文档中的代码和结构保持不变,注释和说明精
包含翻译后的API文档:lz4-java-1.8.0-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.lz4:lz4-java:1.8.0; 标签:lz4、java、中英对照文档、jar包; 使用方法:解压翻译后的API文档,用浏览器打开...
赠送jar包:aliyun-java-sdk-kms-2.11.0.jar; 赠送原API文档:aliyun-java-sdk-kms-2.11.0-javadoc.jar; 赠送源代码:aliyun-java-sdk-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:aws-java-sdk-kms-1.11.939.jar 赠送原API文档:aws-java-sdk-kms-1.11.939-javadoc.jar 赠送源代码:aws-java-sdk-kms-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
包含翻译后的API文档:lz4-java-1.4.1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.lz4:lz4-java:1.4.1; 标签:lz4、java、中英对照文档、jar包; 使用方法:解压翻译后的API文档,用浏览器打开...
赠送jar包:aliyun-java-sdk-core-4.5.30.jar 赠送原API文档:aliyun-java-sdk-core-4.5.30-javadoc.jar 赠送源代码:aliyun-java-sdk-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。