Java編程中文亂碼問題

編程語言 Java Tomcat HTML 程序猿的下午茶 2017-05-31

Tomcat對於GET請求並不會考慮使用request.setCharacterEncoding方法設置的編碼,而會永遠使用iso-8859-1編碼,而這位朋友使用的正好是GET請求,因此,tomcat將會使用iso-8859-1將提交的字節轉換成字符串...

java web開發過程中,中文亂碼是一個老生常談的話題了,那麼該如何解決呢?

Java編程中文亂碼問題

大致思路就是重新編碼為gbk或者gb2312,分兩種情況

a是get和post形式

b是ajax 形式

c是javascript url傳參亂碼問題

d是java web 下載文件名亂碼問題

e是utf8解決JSP中文亂碼問題

第一種:GET和POST,取決於你的頁面編碼,如果你的頁面編碼為iso8859_1

使用:String str= new String(req.getParameter("str").toString().getBytes("iso8859_1"), "GBK");

或者 String str= new String(req.getParameter("str").toString().getBytes("iso8859_1"), "GB2312");

但是,這裡要注意,必須保證你的頁面編碼也是iso8859_1的,因為,上面的代碼的意思是先將你的字符串變為iso8859_1字節流,

然後再轉化為GBK編碼,如果你頁面傳過來的編碼是utf-8,那麼按照上面的方法就會出現:???亂碼

你頁面是utf-8的,就要使用如下編碼:

String str= new String(req.getParameter("str").toString().getBytes("utf-8"), "GBK");

或者 String str= new String(req.getParameter("str").toString().getBytes("utf-8"), "GB2312");

總之get post 原則很簡單,頁面什麼編碼就轉化什麼字節流轉化編碼

第二:Ajax傳值

這個比較麻煩,據測試,不同的瀏覽器有不同的對中文編碼,怎麼辦呢?

我們可以採用js的encodeURI()進行統一的編碼,然後在後臺進行統一的解碼

對應的Java解碼代碼:

str= java.NET.URLDecoder.decode(str, "UTF-8");

當然,因為他是utf-8編碼,所以也可以採用第一種get post 介紹的方法解碼(據測試,用String(req.getParameter("str").toString().getBytes("utf-8"), "GB2312")解碼js的encodeURI()時,會出現亂碼,所以還是老老實實的使用java.Net.URLDecoder.decode(str, "UTF-8");)

不好意思,剛剛查了資料,上面講的Get方式有錯:

Tomcat對於GET請求並不會考慮使用request.setCharacterEncoding方法設置的編碼,而會永遠使用iso-8859-1編碼,而這位朋友使用的正好是GET請求,因此,tomcat將會使用iso-8859-1將提交的字節轉換成字符串。

所以,對於使用get方式傳值的時候,統一使用String str= new String(req.getParameter("str").toString().getBytes("iso8859_1"), "GBK");當然,前提是你服務器是tomcat

第三:javascript url傳參亂碼問題

方案一html頁面:

function testOne() {

var url = "testTwo.action?expr="+你好;

window.location.href = encodeURI(url);

}

後臺java代碼:

String expr = new String(

request.getParameter("expr").getBytes("ISO-8859-1"),"UTF-8");

方案二html頁面:

function testTwo() {

var url = "testTwo.action?expr="+你好;

window.location.href= encodeURI(encodeURI(url));

}

第四:java web 下載文件名亂碼問題

第一種:設置

response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));

這裡將文件名編碼成UTF-8的格式,就不會出現URL出錯了。IE6下注意中文文字不能超過超過17個。

第二種:設置

response.setHeader( "Content-Disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) );

將中文名編碼為ISO8859-1的方式。不過該編碼只支持簡體中文.

按照上訴方式,可以綜合一下兩種方式解決絕大部分中文問題。

fileName = URLEncoder.encode(fileNameSrc,"UTF-8");

if(fileName.length()>150)//解決IE 6.0 bug {

fileName=new String(fileNameSrc.getBytes("GBK"),"ISO-8859-1");

response.setHeader( "Content-Disposition", "attachment;filename=" + fileName);

}

第五:utf8解決JSP中文亂碼問題

  • 一般說來在每個頁面的開始處,加入:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%request.setCharacterEncoding("UTF-8");%>

  • 以上就是java中文亂碼的全部內容了,感謝大家的閱讀!

相關推薦

推薦中...