解决java/jsp乱码的一种转换方法

在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
}
}

BTW:
<%@ page contentType="text/html;charset=gb2312" %>
一定有, 而且要在文件首行(不能在include文件中)

还有, 如果不能正确解析表单内容, 加这一句:

request.setCharacterEncoding("gb2312");

你可能感兴趣的:(解决java/jsp乱码的一种转换方法)