国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

中文轉(zhuǎn)碼問題總結(jié)

2019-11-14 22:59:38
字體:
供稿:網(wǎng)友
中文轉(zhuǎn)碼問題總結(jié)1. 編碼基礎(chǔ)知識(shí)1.1 編碼

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 GBK

1) 能編碼漢字,一個(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");

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 烟台市| 合川市| 正宁县| 梅河口市| 涡阳县| 库车县| 百色市| 招远市| 洱源县| 富民县| 阜宁县| 迁安市| 合肥市| 乐业县| 西充县| 临夏市| 青川县| 宝鸡市| 鹿邑县| 中方县| 分宜县| 灌阳县| 苍山县| 宝清县| 资兴市| 盐亭县| 临潭县| 廉江市| 喀喇沁旗| 香港| 疏勒县| 望谟县| 灵寿县| 金堂县| 忻州市| 兴和县| 阿拉善右旗| 正宁县| 辉县市| 平陆县| 西乡县|