Servlet相關的幾種中文亂碼問題

2021-09-22 10:28:47 字數 2047 閱讀 8736

使得檔案本身以utf-8字符集編輯儲存

讓瀏覽器瀏覽器以utf-8字符集解析

在瀏覽器中右鍵選擇編碼格式為utf-8;

通過標籤模擬response頭,起到告訴瀏覽器用utf-8的編碼解析

具體操作:

//html

或//jsp

<%@ pageencoding="utf-8"%>

//xml

<?xml encoding="utf-8"?>

response亂碼問題

控制瀏覽器用utf-8進行解碼

response.setcontenttype("text/html;charset=utf-8"); 

//或者

response.setheader("content-type","text/html;charset=utf-8");

//ps:setheader是httpservletresponse的方法。如果想在***filter中設定字元編碼,則無此方法,因為filter的dofilter方法的引數型別是servletresponse

將response物件中的資料以utf-8解碼後的位元組流發向瀏覽器

response.setcharacterencoding("utf-8");

request亂碼問題

post請求亂碼

resquest.setcharacterencoding("頁面使用的字符集");  //只對post請求有效
get請求(url方式傳遞引數亂碼)

原因:

//問題本質是get方式傳遞的引數內容預設編碼方式問iso8859-1,而且使用request.setcharacterencoding("utf-8")也無法解決問題。

解決方法一:

修改tomcat伺服器的配置檔案,即修改tomcat目錄下的conf/server.xml檔案。

/>  //注釋為需要新增的部分
解決方法二:

在servlet中手動轉換字符集並轉換(不建議使用)。

//對應servlet中:

string name = request.getparameter("name");

string value = null;

value = new string(name.getbytes("iso-8859-1"),"頁面使用的字符集");

修改資料庫字符集或表字符集

#sql語句

show create table 表名; #查詢表的資訊(主要看字符集)

/*例:table create table

dog create table `dog` (

`dog_id` int(11) not null auto_increment,

......

primary key (`dog_id`)

) engine=innodb auto_increment=1 default charset=utf8*/

#修改完資料庫字符集,需要重啟mysql資料庫

alter database 資料庫名 character set utf8;

#修改表字符集

alter table 表名 default character set utf8 collate utf8_general_ci;

Servlet或springMVC中文亂碼處理

1 如果是get提交,並且tomcat為8.0及以後的版本,tomcat底層已經處理了get提交的中文亂碼問題,所以get提交在tomcat8.0以後的版本沒有中文亂碼問題!2 如果請求是get提交,並且tomcat是7.0及以前的版本,get提交的中文引數,在獲取時會出現亂碼問題!解決方法 在 t...

servlet中獲取request中文亂碼問題分析

request.setcharacterencoding utf 8 第一種情況 log.info 服務商名稱 request.getparameter networkname 服務商名稱 new string request.getparameter networkname getbytes is...

HTMLTestRunner的報告中文亂碼

在學習python selenium自動化測試學習中遇到htmltestrunner測試報告出現亂碼的問題 解決辦法 網上查詢到htmltestrunner測試報告中文亂碼的解決方案 1 開啟htmltestrunner.py原始檔,找到如下行 if isinstance o,str uo unic...