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>


  同样是xt/html;charset=gb2312" %>也能正确显示中文。

------

回复此文章 |

搞定了
String sql="insert into testchat(id,name) values(?,?)";
boolean go=dbsql.con();
PreparedStatement pstmt =dbsql.Prepare(sql);
pstmt.setString(1,1);
pstmt.setString(2,好好);
int sum=pstmt.executeUpdate();
out.println(sum);
pstmt.close();
这样写的程序是可以显示中文的。
————————————————
String id=request.getParameter("id");
//String name=new String(request.getParameter("name").getBytes("ISO8859_1"));
String name=new String(request.getParameter("name"));
String sql="insert into testchat(id,name) values(?,?)";
boolean go=dbsql.con();
PreparedStatement pstmt =dbsql.Prepare(sql);
pstmt.setString(1,id);
pstmt.setString(2,name);
int sum=pstmt.executeUpdate();
out.println(sum);
pstmt.close();
这样通过表单传递给的中文数据;
就显示乱码了。
————————————————————
后来我让他在表单传给数据转化成getBytes("ISO8859_1")
中文问题就搞定了。
——————————————————————


------

回复此文章 |
返回文章首页

--------------------------------------------------------------------------------
汉字问题深入谈
--------------------------------------------------------------------------------

汉字问题深入谈 作者:
一、主题:关于JAVA的中文问题
JAVA的中文问题比较突出,主要表现在控制面板输出,JSP页面输出和数据库访问上。本文尽量避开字体问题,而只谈编码。通过本文,你可以了解JAVA中文问题的由来,问题的解决方法,其中提了一下用JDBC访问数据库的方法。

二、问题描述:
1)在中文W2000中文窗口编译和运行,用的是国际版的JDK,连接的是中文W2000下的Cp936编码的SQL SERVER数据库:

J:\exercise\demo\encode\HelloWorld>make
Created by XCompiler. PhiloSoft All Rights Reserved.
Wed May 30 02:54:45 CST 2001

J:\exercise\demo\encode\HelloWorld>run
Created by XRunner. PhiloSoft All Rights Reserved.
Wed May 30 02:51:33 CST 2001
中文
[B@7bc8b569
[B@7b08b569
[B@7860b569
中文
中文
????
中文
中文
????
??
??
??

2)如果在中文W2000的西文窗口(编码为437)下编译,用JAVA运行则由于无字体而无法正常显示,?为:

J:\exercise\demo\encode\HelloWorld>run
Created by XRunner. PhiloSoft All Rights Reserved.
Wed May 30 02:51:33 CST 2001
????
[B@7bc0b66a
[B@7b04b66a
[B@7818b66a
????
????
????
????
????
????
中文
中文
????

三)分析

1)出现有乱码(也就是?)。由于只出现?而没出现小方框,说明只是编码有问题,而不是字体问题。 在编码中,如果从一种字符集转换到别一种字符集,比较典型的是从GB2312转换到ISO8859_1(即ASCII),那么很多汉字(半个汉字)是无法映射到西文字符中去的,在这种情形下,系统就把这些字符用?代替。同样,也存在小字符集无法到大字符集的情况,具体原因这里就不详谈了。

2)出现了中文环境编译,中文环境运行时汉字显示有正确也有不正确的地方,同样,在西文环境下编译,在中文环境下运行时也出现类似情况。这是由于自动(默认)或手工(也就new String(bytes[,encode])和bytes getBytes([encode]))转码的结果。

2.1)在JAVA源文件-->JAVAC-->Class-->Java-->getBytes()-->new String()-->显示的过程中,每一步都有编码的转换过程,这个过程总是存在的,只是有的时候用默认的参数进行。下面我们一步一步分析为什么出现上面的情形。

2.2)这里是源代码:

HelloWorld.java:
------------------------
public class HelloWorld
{
public static void main(String[] argv){
try{
System.out.println(
"中文");//1
System.out.println(
"中文".getBytes());//2
System.out.println(
"中文".getBytes("GB2312"));//3
System.out.println(
"中文".getBytes("ISO8859_1"));//4

System.out.println(new String(
"中文".getBytes()));//5
System.out.println(new String(
"中文".getBytes(),"GB2312"));//6
System.out.println(new String(
"中文".getBytes(),"ISO8859_1"));//7

System.out.println(new String(
"中文".getBytes("GB2312")));//8
System.out.println(new String(
"中文".getBytes("GB2312"),"GB2312"));//9
System.out.println(new

String(
"中文".getBytes("GB2312"),"ISO8859_1"));//10

System.out.println(new String(
"中文".getBytes("ISO8859_1")));//11
System.out.println(new

String(
"中文".getBytes("ISO8859_1"),"GB2312"));//12
System.out.println(new

String(
"中文".getBytes("ISO8859_1"),"ISO8859_1"));//13
}
catch(Ex

hofman   2005-11-19 22:27:27 评论:0   阅读:4756   引用:0

发表评论>>

署名发表(评论可管理,不必输入下面的姓名)

姓名:

主题:

内容: 最少15个,最长1000个字符

验证码: (如不清楚,请刷新)

Copyright@2004-2010 powered by YuLog