Java

本类阅读TOP10

·使用MyEclipse开发Struts框架的Hello World!(录像1)
·hibernate配置笔记
·AOP编程入门--Java篇
·linux下Tomcat 5.0.20 与 Apache 2 安装/集成/配置
·在win2003下整合了整合Tomcat5.5+ apache_2.0.53+ mod_jk_2.0.47.dll
·构建Linux下IDE环境--Eclipse篇
·Jsp 连接 mySQL、Oracle 数据库备忘(Windows平台)
·ASP、JSP、PHP 三种技术比较
·Tomcat5.5.9的安装配置
·AWT GUI 设计笔记(二)

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
Java的国际化问题

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

Java的国际化问题(中日文编码问题)

1、常见的Encoding现象

网上常出现的 JSP/Servlet encoding 问题一般都表现在 browser 或应用程序.

隐藏在这些问题后面的是各种错误的字符转换和处理。解决类似的字符 Encoding问题,需要了解 Jsp/Servlet 的运行过程,检查可能出现问题的各个点。

2JSP/Servlet web 编程时的 Encoding具体分析 

1JSP 编译。 

2Java 需要被编译为 .class 才能在 JVM 中执行。 

3Servlet 需要将HTML页面内容转换为 browser 可接受的 encoding 内容发送出去。

依赖于各 JAVA App Server 的实现方式,有的将查询 Browser accept-charset accept-language 参数或以其它猜的方式确定 encoding 值,有的则不管。因此采用固定encoding 也许是最好的解决方法。对于中文网页,可在 JSP Servlet 中设置 contentType="text/html; charset=GB2312";如果页面中有GBK字符,则设置为contentType="text/html; charset=GBK",由于IE NetscapeGBK的支持程度不一样,作这种设置时需要测试一下。

因为16 JAVA char在网络传送时高8位会被丢弃,也为了确保Servlet页面中的汉字(包括内嵌的和servlet运行过程中得到的)是期望的内码,可以用 PrintWriter out = res.getWriter() 取代 ServletOutputStream out = res.getOutputStream()PrinterWriter 将根据contentType中指定的charset作转换 (ContentType需在此之前指定!);也可以用OutputStreamWriter封装 ServletOutputStream 类并用write(String)输出汉字字符串。对于 JSPJAVA Application Server 应当能够确保在这个阶段将嵌入的汉字正确传送出去。这是解释 URL 字符 encoding 问题。

4、如果通过 get/post 方式,servlet 将无法得到正确的值。

SUN J2SDK 中,HttpUtils.parseName 在解析参数时根本没有考虑 browser 的语言设置,而是将得到的值按 byte 方式解析。这是网上讨论得最多的 encoding 问题。因为这是设计缺陷,只能以 byte 方式重新解析得到的字符串;或者以修改HttpUtils 类的方式解决。不过最好将其中的中文 Encoding GB2312 CP1381 都改为 GBK,否则遇到 GBK 汉字时,还是会有问题。




相关文章

相关软件