当前位置: 首页 > 图文教程 > 网络编程 > JSP > 关于JSP中文问题的解决方法

JSP
jsp计数器制作
用jsp编写文件上载
基于JSP的动态网站开发技术
JSP由浅入深(3)—— 通过表达式增加动态内容
JSP由浅入深(5)—— Scriptlets和HTML的混合
JSP由浅入深(1)—— 熟悉JSP服务器
JSP由浅入深(12)—— 表单编辑
JSP由浅入深(11)—— 标记库
JSP由浅入深(10)—— Beans and Forms处理
JSP由浅入深(9)—— JSP Sessions
JSP由浅入深(8)—— JSP Tags
JSP由浅入深(6)—— JSP声明
JSP由浅入深(4)—— Scriptlets
JSP由浅入深(2)—— 第一个JSP
JSP由浅入深(7)—— JSP Directives
JSP中的字符替换函数 str_replace() 实现!
把一张图片变形扭曲成各种不同的长宽
用JSP编写通用信息发布程序
Java Servlet及Cookie的使用
Apache+Servlet+Jsp环境设置(上)

关于JSP中文问题的解决方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 48 ::
收藏到网摘: n/a

在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下应该没有这样的问题。