1. 程式人生 > >form提交資料中文亂碼問題總結

form提交資料中文亂碼問題總結

  一:form在前臺以post方式提交資料:

    瀏覽器將資料(假設為“中國”)傳送給伺服器的時候,將資料變成0101的二進位制資料(假設為98 99)時必然要查碼錶,瀏覽器以哪個碼錶開啟網頁,瀏覽器就以哪個碼錶提交資料。資料到達伺服器後,資料(98 99)要封裝到request中,在servlet中呼叫Request的getParameter方法返回的是字串(“中國”),方法內部拿到數字後要轉成字元,一定要查碼錶,由於request的設計者是外國人,所以預設查的是他們常用的ISO8859-1,這就是請求資料產生亂碼的根源。

package com.yyz.request;

import
java.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 { public
void 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,