在jsp中,中文乱码常会让人心乱如麻。
对于中文处理的常见对策,在网上经常可见的主要是下面2种:
| <%@ page contenttype="text/html;charset=gb2312" %> |
或者:
| <% string hi="你好"; byte[] tmpbyte=hi.getbytes("iso8859_1"); hi=new string(tmpbyte); out.print(hi); %> |
虚拟小龙亭也主要采用了上面2种方法进行了修改,从而变成了1.1版。
通过简单总结,示例中的中文处理发生于以下几个地方:
1 在url附带中文参数,可以直接读取。
例如:
| <%= request.getparameter("showword")%> |
2 与数据库有关的各种sql操作
这里使用的access没有发生问题。
3 读取html
form表单中递交的中文值
在jswdk中需要加以编码,较为简洁的写法如:
| string name1=new string(request.getparameter("user_id").getbytes("iso8859_1")); |
另外,在jdk1.3的支持下,不需要加入
| <%@ page contenttype="text/html;charset=gb2312" %> |
而在jdk1.2.2下面,即使2种方法同时运用也很不稳定。
而在resin平台,情况较好。只要在页面第一行加入:
| <%@ page contenttype="text/html;charset=gb2312" %> |
即可正确处理中文。
如果再加编码则反而不对。
5 session中包含的中文
在jswdk中,奇怪的是如果从form中读出的值经过编码则可正确显示;
但直接赋予中文值则不行。
resin平台很好,同上。
6 对于对变量赋中文值后正确显示中文。
例如以下程序:
| <%@ page contenttype="text/html;charset=gb2312" %> <html><head></head><body> <% string hi="你好"; byte[] tmpbyte=hi.getbytes("iso8859_1"); hi=new string(tmpbyte); out.print(hi); %> </body></html> |
同样是jswdk1.0.1,以上的表示方法在jdk1.2.2中没有问题,但在jdk1.3下却无法显示。
resin平台很好,同上,经过测试,只需要在<head>中补上
| <meta http-equiv="content-type" content="text/html; charset=gb2312"> 而不需要<%@ page contenttype="text/html;charset=gb2312" %>也能正确显示中文。 |
体会:
jswdk也许只能用于普通开发,稳定性和其它问题可能不如商业软件。
由于jdk1.3版性能要好于jdk1.2.2很多倍,并且对中文的支持也较好,所以应该加以采用。
作为免费的商业软件,resin不仅速度快,稳定,自动编译,可指出出错行,可在服务器端支持使用javascript等,而且,至少我觉得对中文的支持很好。
当然,如果不必做任何处理即可正确显示中文将是我们所期待的。
另外,相信在unix/linux/solaris下应该没有这样的问题。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器