首先在這里列出之前為了解決亂碼問(wèn)題而做的的一些設(shè)置(之前一直用的是表單提交):
1.jsp
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
pageEncoding 是 jsp 文件本身的編碼
contentType 的 charset 是指服務(wù)器發(fā)送給客戶(hù)端時(shí)的內(nèi)容編碼
2.web.xml
<?xml version="1.0" encoding="UTF-8"?>
3.servlet
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
4.jdbc
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test?user=root&password=123456&useUnicode=true&characterEncoding=UTF-8");
為什么還會(huì)亂碼
對(duì)錯(cuò)誤進(jìn)行的定位及分析后發(fā)現(xiàn)應(yīng)該是:
URL編碼之后向服務(wù)器發(fā)送請(qǐng)求,而在服務(wù)器中未正確解碼觅够。
我好方
URL的三個(gè) javascript 編碼函數(shù):escape(),encodeURI(),encodeURIComponent()胶背。
解決
String message = request.getParameter("message");
message = new String(message.getBytes("ISO-8859-1"),"UTF-8");
其他方案
設(shè)置 tomcat 的 URIEncoding(還沒(méi)試過(guò))
在默認(rèn)情況下,tomcat服務(wù)器使用的是ISO-8859-1編碼格式來(lái)編碼的喘先。
- URIEncoding參數(shù)對(duì)get請(qǐng)求的URL進(jìn)行編碼钳吟。所以我們只需要在tomcat的
server.xml
文件<Connector>標(biāo)簽中加上URIEncoding=”utf-8″
即可。
- 在Tomcat中設(shè)置編碼為UTF-8的地方增加一個(gè)屬性{seBodyEncodingForURI="true"}