其实,乱码问题困惑着很多人。网上也有很多文章介绍乱码的处理问题。
很多人从网上找到乱码解决问题后,就试可是还是解决不了。往往是没有对症下药。
在jsp中,本人知识薄弱目前只知道有三种原因会有中文乱码的出现。找到了原因这才能对症下药。
1.jsp的contentType 的设置
<%@page contentType="text/html;charset=GB2312"%>
2.一个就是某些包中的类对中文没有良好的支持。就比如说我刚刚用的上传的一个包,这个包中的类对中文支持就是不好,显示在网页中的中文全部是???????。后来当我从这个包的类里取出的数据都用了new String(file_item.getName().getBytes("iso8859-1"),"GBK"))就解决了问题。
如:
<%@ page contentType="text/html; charset=GBK" language="java" import="java.sql.*" errorPage="" %>
<%@ page import="org.apache.commons.fileupload.DiskFileUpload, org.apache.commons.fileupload.FileItem" %>
<%
if("POST".equalsIgnoreCase(request.getMethod()) && request.getContentType().startsWith("multipart/form-data")) {
DiskFileUpload upload = new DiskFileUpload();
java.util.List files = upload.parseRequest(request);//取得表单
FileItem file_item;
for(int i=0; i< files.size(); i++) {//循环得出表单中的元素,这里为了看是否id有值可取出dbms_phsgame
file_item = (FileItem)files.get(i);
//如果有id元素,就从数据库中取出dbms_phsgame
if("file".equalsIgnoreCase(file_item.getFieldName())) {
out.println(new String(file_item.getName().getBytes("iso8859-1"),"GBK"));
}
}
}
%>
<html>
<body>
<form name="form1" enctype="multipart/form-data" method="post" action="">
<input type="file" name="file">
<input type="submit" name="Submit" value="提交">
</form>
</body>
</html>
3.数据库数据本身就是乱码。
这里推荐一个办法---就是getBytes()的方法
//用于读数据库时由iso8859-1变为GBK
public String GBKConverter(String s_string){
try{
String des = new String(s_string.getBytes("iso8859-1"),"GBK");
return des;
}
catch(Exception ex){
String des="";
return des;
}
}
//用于处理页内生成的中文数据在写入数据库时的处理,由GBK变为iso8859-1
public String ISOConverter(String s_string){
try{
String des = new String(s_string.getBytes("GBK"),"iso8859-1");
return des;
}
catch(Exception ex){
String des = "";
return des
}
}