ISO-8859-1編碼是單字節(jié)編碼,向下兼容ASCII,其編碼范圍是0x00-0xFF,0x00-0x7F之間完全和ASCII一致,0x80-0x9F之間是控制字符,0xA0-0xFF之間是文字符號(hào)
單字節(jié),即一個(gè)字節(jié)對(duì)應(yīng)一個(gè)編碼,不能編碼漢字
1.2 GBK1) 能編碼漢字,一個(gè)漢字用2個(gè)字節(jié)編碼
2) 編碼的漢字比GB2312更多
1.3 GB2312能編碼漢字,一個(gè)漢字用2個(gè)字節(jié)編碼
1.4 UTF-8能編碼漢字,一個(gè)漢字用3個(gè)字節(jié)編碼
漢字,字母,特殊符號(hào),gbk和utf-8之間是可以互相轉(zhuǎn)換的
2. Web系統(tǒng)轉(zhuǎn)換編碼2.1 原理這里邊有個(gè)編碼和解碼的過程
網(wǎng)絡(luò)傳輸發(fā)送端需要將字符串編碼成字節(jié)
可以是utf-8,gbk等,轉(zhuǎn)換成字節(jié)的過程中不能丟失編碼
接收端需要用發(fā)送端同樣的編碼方式進(jìn)行解碼,否則將出現(xiàn)亂碼
一般由服務(wù)端確定一種編碼和解碼的方式,
然后告知客戶端編碼和解碼的方式
網(wǎng)絡(luò)傳輸編碼2.2.1 接收瀏覽器POST請(qǐng)求設(shè)置瀏覽器編碼和解碼方式為utf-8
如:
<%@ page pageEncoding="utf-8" contentType="text/html; charset=utf-8" language="java"%>
服務(wù)端解碼方式1:
String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");服務(wù)端解碼方式2:
request.setCharacterEncoding("UTF-8");2.2.2 接收瀏覽器GET請(qǐng)求如:
http://localhost:8888/webtest/EncodeServlet?name=你好
瀏覽器將會(huì)對(duì)url進(jìn)行urlEncode,編碼方式為UTF-8
服務(wù)端解碼方式:
String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");此處用request.setCharacterEncoding("UTF-8");來設(shè)置解碼,不能奏效,原因是get請(qǐng)求將參數(shù)拼在url后面進(jìn)行url encode,而web容器對(duì)url的解碼是在調(diào)用servlet之前,且默認(rèn)解碼方式是iso-8859-1
2.2.3 響應(yīng)給瀏覽器Response設(shè)置編碼:
Response是指響應(yīng)給客戶端時(shí),字節(jié)的編碼方式,默認(rèn)為ISO-8859-1
可用如下方法查看:
response.getCharacterEncoding();
設(shè)置響應(yīng)流的編碼方式:
response.setCharacterEncoding("UTF-8");
設(shè)置瀏覽器的編碼和解碼方式:
response.setContentType("text/html;charset=UTF-8");
jsp設(shè)置:
<%@ page pageEncoding="utf-8" contentType="text/html; charset=utf-8" language="java"%>
pageEncoding:設(shè)置jsp文件存儲(chǔ)編碼
contentType里面的charset:設(shè)置瀏覽器端傳輸?shù)木幋a和解碼
解析響應(yīng)時(shí)解碼,發(fā)送請(qǐng)求時(shí)編碼
要保持響應(yīng)流和編碼和瀏覽器解碼方式一致,才能不亂碼
2.2.4 HTTPClient設(shè)置編碼控制編碼Struts.xml中做如下配置:
<constant name="struts.i18n.encoding" value="utf-8"></constant>
2.4 SPRing控制編碼Web.xml中配置如下:
<filter><filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter>
其中encoding設(shè)置服務(wù)端編碼和解碼的方式
forceEncoding表示強(qiáng)制編碼的方式
3. 字符串轉(zhuǎn)字節(jié)轉(zhuǎn)碼String s = "s漢";byte[] bytes1 = s.getBytes("ISO-8859-1");//丟失字符byte[] bytes2 = s.getBytes("GBK");byte[] bytes3 = s.getBytes("UTF-8");4. 字節(jié)轉(zhuǎn)字符串String s1 = new String(bytes1,"utf-8");//丟失String s2 = new String(bytes2,"GBK");String s3 = new String(bytes3,"utf-8");
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注