jsp教程中文乱码的处理方法
在jsp代码中以下几处经常需要涉及到中文处理:
1. 在url中附带中文参数。这里中文参数通常可以直接读取,例如: <%= request.getparameter("showword")%>
2. 在jswdk中读取html表单提交的中文值这时需要加以编码,较为简洁的写法是:
string name1=new string(request.getparameter("user_id").getbytes("iso8859_1"))。
另外,在jdk 1.3的支持下,不需加入<%@ page contenttype="text/html;charset=gb2312"%> ,而在jdk 1.2.2 以下,即使以上两种方法同时运用也很不稳定。但在resin平台,情况较好,只要在页面第一行加入:<%@ page contenttype="text/html;charset=gb2312"%>即可正确处理中文,如果再加代码则反而不对。
3.在jswdk中session包含的中文,如果从表单中读出的值经过编码可正确显示,但直接赋予中文值则不行,而resin平台则很好。
4. 在编译servlet和jsp时加入代码选项。在编译servlet时使用java-encoding iso8859-1 myservlet.java;在jsp的zone配置文件中,修改编译参数为:compiler=builtin - javac- encoding iso8859-1。使用这种方法后,不需要做其他的改动就可以正常显示中文了。
另外,流行的关系数据库教程系统都支持数据库encoding,也就是说在创建数据库时可以指定它自己的字符集设置,数据库的数据以指定的编码形式存储。当应用程序访问数据时,在入口和出口处都会有 encoding 转换。对于中文数据,数据库字符编码的设置应当保证数据的完整性。 gb2312、gbk、utf-8 等都是可选的数据库 encoding,也可以选择 iso8859-1 (8-bit), 但会增加了编程的复杂度,iso8859-1不是推荐的数据库 encoding。在jsp/servlet编程时,可以先用数据库管理系统提供的管理功能检查其中的中文数据是否正确。
处理方法实例
下面是两个具体的中文乱码解决实例,读者仔细研究后可能会有所收获。
1.常见的字符转换方法
将form 中 的 值 传 送 到 数 据 库 中 再 取 出 来 后 全 变 成 了"?"。form用post提交数据,代码中使用了语句:string st=new(request.getparameter("name").getbytes("iso8859_1")), 而且也声明了charset=gb2312。
要处理form中传递的中文参数,应该在jsp中加入下面的代码,另外定义一个专门解决这个问题的getstr类,然后对接收到的参数进行转换:
string keyword1=request.getparameter("keyword1");
keyword1=getstr(keyword1);
这样就可以解决问题了,代码如下:
<%@ page contenttype="text/html;charset=gb2312"%>
<%!
public string getstr(string str){
try{string temp_p=str;
byte[] temp_t=temp_p.getbytes("iso8859-1");
string temp=new string(temp_t);
return temp;
}
catch(exception e){ }
return "null";
}
%>
<%--http://www.cndes.com测试--%>
<% string keyword="创联网络技术中心欢迎您的到来";
string keyword1=request.getparameter("keyword1");
keyword1=getstr(keyword1);
out.print(keyword);
out.print(keyword1);
%>再看一款页面与数据库中文乱码处理方法
post.jsp
<form method="post" action="addmsg.jsp">
name:<input type="text" name="name" >
<input type="submit" value="submit">
</form>
<html>
<head>
<title>使用jdbc直接访问数据库</title>
</head>
<%@ page contenttype="text/html;charset=gb2312" %>
<%@ page import="java.sql.*" %>
<%
//string name=new string(request.getparameter("name").getbytes("iso8859_1"),"gbk");
string name = request.getparameter("name");
out.println(name);
class.forname("org.gjt.mm.mysql教程.driver");
connection
con=drivermanager.getconnection("jdbc:mysql://localhost/bbs?useunicode=true&characterencoding=utf-8","root","123456");
statement stmt=con.createstatement();
string sql="insert into book(name)values('"+name+"')";
int value;
value=stmt.executeupdate(sql);
if(value>0)
{
out.println("ok");
}
else
{
out.println("no");
}
stmt.close();
con.close();
%>
</table>
</body>
</html>