Java是一種可以撰寫跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言。Java 技術(shù)具有卓越的通用性多望、高效性、平臺(tái)移植性和安全性氢烘,廣泛應(yīng)用于PC怀偷、數(shù)據(jù)中心、游戲控制臺(tái)播玖、科學(xué)超級(jí)計(jì)算機(jī)椎工、移動(dòng)電話和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開發(fā)者專業(yè)社群。
給你Java學(xué)習(xí)路線:html-css-js-jq-javase-數(shù)據(jù)庫(kù)-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm
Tomcat對(duì)于GET請(qǐng)求并不會(huì)考慮使用request.setCharacterEncoding方法設(shè)置的編碼维蒙,而會(huì)永遠(yuǎn)使用iso-8859-1編碼掰吕,而這位朋友使用的正好是GET請(qǐng)求,因此木西,tomcat將會(huì)使用iso-8859-1將提交的字節(jié)轉(zhuǎn)換成字符串...
java web開發(fā)過程中畴栖,中文亂碼是一個(gè)老生常談的話題了,那么該如何解決呢八千?
小編推薦一個(gè)學(xué)Java的學(xué)習(xí)裙【 六五零,五五四燎猛,六零七 】恋捆,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)重绷!裙內(nèi)有開發(fā)工具沸停,很多干貨和技術(shù)資料分享!
大致思路就是重新編碼為gbk或者gb2312昭卓,分兩種情況
a是get和post形式
b是ajax 形式
c是javascript url傳參亂碼問題
d是java web 下載文件名亂碼問題
e是utf8解決JSP中文亂碼問題
第一種:GET和POST愤钾,取決于你的頁(yè)面編碼,如果你的頁(yè)面編碼為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");
但是候醒,這里要注意能颁,必須保證你的頁(yè)面編碼也是iso8859_1的,因?yàn)榈挂厦娴拇a的意思是先將你的字符串變?yōu)閕so8859_1字節(jié)流伙菊,
然后再轉(zhuǎn)化為GBK編碼,如果你頁(yè)面?zhèn)鬟^來的編碼是utf-8敌土,那么按照上面的方法就會(huì)出現(xiàn):???亂碼
你頁(yè)面是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 原則很簡(jiǎn)單,頁(yè)面什么編碼就轉(zhuǎn)化什么字節(jié)流轉(zhuǎn)化編碼
第二:Ajax傳值
這個(gè)比較麻煩返干,據(jù)測(cè)試兴枯,不同的瀏覽器有不同的對(duì)中文編碼,怎么辦呢矩欠?
我們可以采用js的encodeURI()進(jìn)行統(tǒng)一的編碼财剖,然后在后臺(tái)進(jìn)行統(tǒng)一的解碼
對(duì)應(yīng)的Java解碼代碼:
str= java.NET.URLDecoder.decode(str, "UTF-8");
當(dāng)然,因?yàn)樗莡tf-8編碼晚顷,所以也可以采用第一種get post 介紹的方法解碼(據(jù)測(cè)試峰伙,用String(req.getParameter("str").toString().getBytes("utf-8"), "GB2312")解碼js的encodeURI()時(shí),會(huì)出現(xiàn)亂碼该默,所以還是老老實(shí)實(shí)的使用java.Net.URLDecoder.decode(str, "UTF-8");)
不好意思瞳氓,剛剛查了資料,上面講的Get方式有錯(cuò):
Tomcat對(duì)于GET請(qǐng)求并不會(huì)考慮使用request.setCharacterEncoding方法設(shè)置的編碼,而會(huì)永遠(yuǎn)使用iso-8859-1編碼匣摘,而這位朋友使用的正好是GET請(qǐng)求店诗,因此,tomcat將會(huì)使用iso-8859-1將提交的字節(jié)轉(zhuǎn)換成字符串音榜。
所以庞瘸,對(duì)于使用get方式傳值的時(shí)候,統(tǒng)一使用String str= new String(req.getParameter("str").toString().getBytes("iso8859_1"), "GBK");當(dāng)然赠叼,前提是你服務(wù)器是tomcat
第三:javascript url傳參亂碼問題
方案一html頁(yè)面:
function testOne() {
var url = "testTwo.action?expr="+你好;
window.location.href = encodeURI(url);
}
后臺(tái)java代碼:
String expr = new String(
request.getParameter("expr").getBytes("ISO-8859-1"),"UTF-8");
方案二html頁(yè)面:
function testTwo() {
var url = "testTwo.action?expr="+你好;
window.location.href= encodeURI(encodeURI(url));
}
小編推薦一個(gè)學(xué)Java的學(xué)習(xí)裙【 六五零擦囊,五五四,六零七 】嘴办,無論你是大牛還是小白瞬场,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具涧郊,很多干貨和技術(shù)資料分享贯被!
第四:java web 下載文件名亂碼問題
第一種:設(shè)置
response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
這里將文件名編碼成UTF-8的格式,就不會(huì)出現(xiàn)URL出錯(cuò)了妆艘。IE6下注意中文文字不能超過超過17個(gè)彤灶。
第二種:設(shè)置
response.setHeader( "Content-Disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) );
將中文名編碼為ISO8859-1的方式。不過該編碼只支持簡(jiǎn)體中文.
按照上訴方式批旺,可以綜合一下兩種方式解決絕大部分中文問題幌陕。
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中文亂碼問題
一般說來在每個(gè)頁(yè)面的開始處,加入:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%request.setCharacterEncoding("UTF-8");%>
以上就是java中文亂碼的全部?jī)?nèi)容了朱沃,感謝大家的閱讀苞轿!