form提交資料中文亂碼問題總結
一:form在前臺以post方式提交資料:
瀏覽器將資料(假設為“中國”)傳送給伺服器的時候,將資料變成0101的二進位制資料(假設為98 99)時必然要查碼錶,瀏覽器以哪個碼錶開啟網頁,瀏覽器就以哪個碼錶提交資料。資料到達伺服器後,資料(98 99)要封裝到request中,在servlet中呼叫Request的getParameter方法返回的是字串(“中國”),方法內部拿到數字後要轉成字元,一定要查碼錶,由於request的設計者是外國人,所以預設查的是他們常用的ISO8859-1,這就是請求資料產生亂碼的根源。
package com.yyz.request; importjava.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //以post方式提交表單 public class RequestDemo extends HttpServlet { publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //請求資料的中文亂碼問題 request.setCharacterEncoding("UTF-8");//客戶端網頁我們控制為UTF-8 String username = request.getParameter("username"); //獲取資料正常,輸出資料時可以查閱不同碼錶 response.setCharacterEncoding("gb2312");//通知伺服器傳送資料時查閱的碼錶 response.setContentType("text/html;charset=gb2312");//通知瀏覽器以何種碼錶開啟 PrintWriter out = response.getWriter(); out.write(username); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } }
二:form在前臺以get方式提交資料:
get方式提交的資料依然是瀏覽器用什麼碼錶開啟就用什麼碼錶傳送。不同的是,以get方式提交資料時,request設定編碼無效。即使設定了UTF-8還是會去查ISO8859-1。得到(? ?),要解決這個問題,需要拿著(??)反向查ISO8859-1,拿到(98 99)後,再去查正確碼錶。
1 package com.yyz.request; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 //以get方式提交表單 11 public class RequestDemo extends HttpServlet { 12 13 public void doGet(HttpServletRequest request, HttpServletResponse response) 14 throws ServletException, IOException { 15 //請求資料的中文亂碼問題 16 request.setCharacterEncoding("UTF-8");//以get方式提交資料時,request設定編碼無效。即使設定了UTF-8還是會去查ISO8859-1 17 String username = request.getParameter("username"); 18 System.out.println(username); 19 byte source [] = username.getBytes("iso8859-1"); 20 username = new String (source,"UTF-8"); 21 System.out.println(username); 22 23 } 24 25 public void doPost(HttpServletRequest request, HttpServletResponse response) 26 throws ServletException, IOException { 27 doGet(request,response); 28 } 29 30 }
三:提交資料中文亂碼問題總結:
1.如果提交方式為post,想不亂碼,只需要設定request物件的編碼即可。
注意:客戶機資料是以哪種方式提交的,request就應該設成什麼編碼。
2.如果提交方式為get,設定request物件的編碼是無效的,想不亂碼,只能手工轉換。
String data = "???????";//亂碼字串
byte source [] = data.getBytes("iso8859-1");//得到客戶機提交的原始資料
data = new String (data.getBytes("iso8859-1"),"UTF-8");//解決亂碼
//等同於
data = new String (source,"UTF-8");
3.get方式的亂碼,還可以通過更改伺服器配置的方式實現。更改Tomact的conf目錄下的server.xml檔案。
3.1 這種方式並不推薦,因為更改了伺服器且並不靈活。
3.2這麼設定後,request的setCharacterEncoding設定什麼編碼,聯結器就用什麼編碼,雖然比上一種更改靈活,但依然會導致我們的應用程式牢牢依賴於伺服器,也不被推薦。
四:最後的最後,提一個小細節:URL地址後面如果跟了中文資料,一定要經過URL編碼。表單提交的引數有中文資料,瀏覽器會自動幫我們編碼,但如果是通過連結直接帶中文引數,瀏覽器是不會幫我們編碼的,這時想通過上述第二種方式解決中文亂碼問題就時靈時不靈了,應該通過URLEncoding.encode(,"UTF-8")先編碼。
相關推薦
form提交資料中文亂碼問題總結
一:form在前臺以post方式提交資料: 瀏覽器將資料(假設為“中國”)傳送給伺服器的時候,將資料變成0101的二進位制資料(假設為98 99)時必然要查碼錶,瀏覽器以哪個碼錶開啟網頁,瀏覽器就以哪個碼錶提交資料。資料到達伺服器後,資料(98 99)要封裝到request中,在servlet中
java中form以post、get方式提交資料中文亂碼問題總結
一:form在前臺以post方式提交資料: 瀏覽器將資料(假設為“中國”)傳送給伺服器的時候,將資料變成0101的二進位制資料(假設為98 99)時必然要查碼錶,瀏覽器以哪個碼錶開啟網頁,瀏覽器就以哪個碼錶提交資料。資料到達伺服器後,資料(98 99)要封裝到req
提交form表單中文亂碼
首先專案中已有如下配置: 頁面: <form action="${base}/ztzx/lianHeChengJie" accept-charset="UTF-8" onsubmit="document.charset='UTF-8'"> </form> <
表單提交後資料中文亂碼的終極解決方案
1、檢視頁面是否使用utf-8編碼 ①jsp頁面: <%@ page language="java" contentType="text/html; charset=UTF-8"
重慶校區WEB中文亂碼總結下
gdi com 5% ive 重慶 auto nsh ans aio %E5%93%88%E5%93%88%E7%BB%88%E4%BA%8E%E5%AD%A6%E4%BC%9A%E8%80%81%E5%B8%88%E6%8A%BD%E6%9F%A5%E4%BA%A4%E4
Jmeter響應資料中文亂碼
只是簡單的做了一個百度的http請求,然後發現響應斷言fail,檢視響應資料出現了亂碼。 然後想到是編碼的問題,解決方式如下: 1、在相應節點的下方,比如http請求,新增後置處理器–》BeanShellPostProcessor 2、然後在其指令碼框中新增如下程式碼
mysql 匯入表資料中文亂碼
方法一: 先在命令列設定為utf8,再匯入 1. use database_name; 2. set names utf8; (或其他需要的編碼) 3. source example.sql (sql檔案存放路徑) 方法二: 在sql檔案中加入以下程式碼 &nbs
將專案部署到Tomcat伺服器後從頁面接收MySQL資料中文亂碼
問題描述: 1、將專案部署到伺服器之後從頁面接收的中文亂碼 2、資料庫中原有的資料都能正常顯示 產生原因:沒有對Tomcat伺服器和MySQL進行配置更改 解決流程: 一、 修改Tomcat配置 更改兩個檔案的配置 1.server.xml <C
SpringMvc解決返回前臺資料中文亂碼
1.加註解方式,第一個是返回json格式,第二個是文字格式 @RequestMapping(value="/getCartGoodsListByUserId",produces="application/json;charset=UTF-8") @RequestMapp
springMVC通過post獲取資料中文亂碼問題
<filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterE
ajax獲取資料中文亂碼問題最簡單的完美解決方案
$.ajax({ url : "${ctx}/selection/democracyRecommend/partyMzAjaxSelectListNewA?hytjId="+hytjId+"&voteFlag="+voteFlag, type : "POST", data : { numIds : n
dbutils插入資料中文亂碼問題
java使用dbutils插入資料時中文資料到了mysql資料庫裡就會變成"?"。查了好多方法,終於解決了。 要解決亂碼問題要保證3處地方的編碼是一致的。 java程式碼的編碼方式 資料庫的編碼方式 jdbc設定的編碼方式 舉例:將編碼方式全部設定成utf-8 java編碼格式
【java web】JSP中form表單中文亂碼的解決嘗試
在人生中的第一個實際專案中,我遇到了一個很困擾的問題,就是在內管系統中,我做了一個測試頁面,用來測試向對方介面傳遞引數,我使用了jsp的form表單向後端傳遞引數,在本地啟動服務,進行測試都沒有問題,沒有出現中文亂碼的情況,但是提交到測試環境進行驗證時,卻出現了
pl/sql 連線資料 中文 亂碼
window 新增環境變數 NLS_LANG 數值資料是SIMPLIFIED CHINESE_CHINA.ZHS16GBK linux bash下 NLS_LANG=AMERICAN_AMERI
ubantu,navicat for mysql 表中資料中文亂碼
問題: Linux下MySQL workbench連線資料庫,表中資料不亂碼,但是我下載安裝類Navicat for mysql 64位 英文版,其中顯示的中文資料亂碼 解決步驟: 1、下載好
Android傳統HTTP請求get----post方式提交資料(包含亂碼問題)
1.模仿登入頁面顯示(使用傳統方式是面向過程的) 使用Apache公司提供的HttpClient API是面向物件的 (文章底部含有原始碼的連線,包含了使用async框架) (解決中文亂碼的問題,主要是對中文的資料進行URL編碼) android手機預設的編碼是UTF-
AJAX中文亂碼總結
1.傳送路徑中的引數有中文,在伺服器段接收引數值是亂碼 解決辦法:前端(客戶端)兩次編碼,後端(伺服器)一次解碼! 前端: var url="index.jsp?test=來自前臺我不是亂碼"; url=encodeURI(url); url=encodeURI
JSON返回的資料中文亂碼問題!!!
伺服器返回的是utf-8,jsp頁面上也是utf-8,資料庫也是utf-8怎麼就是亂碼呢!!!! 在網上天昏地暗地找了兩天總算有解決方案了: 問題出在getHttpResponse 輸入流! in = new BufferedReader(new InputStream
java http 給 c++傳送json資料中文亂碼問題
首先感謝 http://blog.csdn.net/amazingrace/article/details/8794088 說重點: 專案: 伺服器c++,使用多語言字符集,預設GBK,直接用socket處理網路連線,自行解析http訊息(訊息真的很少,工作
AJAX POST資料中文亂碼解決
前端使用encodeURI進行編碼 var param = encodeURI(param); $.ajax({ url: 'url', methodtype: "POST", async: false,