1. 程式人生 > >tomcat設定編碼格式utf8

tomcat設定編碼格式utf8

利用request.setCharacterEncoding("UTF-8");來設定Tomcat接收請求的編碼格式,只對POST方式提交的資料有效,對GET方式提交的資料無效!

要設定GET的編碼,可以修改server.xml檔案中,相應的埠的Connector的屬性:URIEncoding="UTF-8",這樣,GET方式提交的資料才會被正確解碼。

  <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding="UTF-8" />

tomcat8以後預設編碼格式是utf-8;7之前的都是iso8859-1

如果預設情況下,tomcat使用的的編碼方式:iso8859-1

修改tomcat下的conf/server.xml檔案

找到如下程式碼:    
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
這段程式碼規定了Tomcat監聽HTTP請求的埠號等資訊。

可以在這裡新增一個屬性:URIEncoding,將該屬性值設定為UTF-8,即可讓Tomcat(預設ISO-8859-1編碼)以UTF-8的編碼處理get請求。

修改完成後:

<Connector port="8080"  protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />

  一: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")先編碼。

新配置一個spring的MVC專案,發現對Get請求的中文引數出現了亂碼:

查看了SpingMVC中關於編碼的配置(在web.xml中),如下

  1. <filter>  
  2.     <filter-name>encodingFilter</filter-name>  
  3.     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  4.     <init-param>  
  5.         <param-name>encoding</param-name>  
  6.         <param-value>utf-8</param-value>  
  7.     </init-param>  
  8.     <init-param>  
  9.         <param-name>forceEncoding</param-name>  
  10.         <param-value>true</param-value>  
  11.     </init-param>  
  12. </filter>  
  13. <filter-mapping>  
  14.     <filter-name>encodingFilter</filter-name>  
  15.     <servlet-name>appkit</servlet-name>  
  16. </filter-mapping>  

應該不是Spring的問題,應該是Tomcat的問題,然後去修改Tomcat的配置檔案server.xml,新增URIEncoding="UTF-8"

  1. <Connector port="8080" protocol="HTTP/1.1"  
  2.            connectionTimeout="20000"  
  3.            redirectPort="8443"  
  4.            URIEncoding="UTF-8"/>  

然後就好了

相關推薦

tomcat設定編碼格式utf8

利用request.setCharacterEncoding("UTF-8");來設定Tomcat接收請求的編碼格式,只對POST方式提交的資料有效,對GET方式提交的資料無效! 要設定GET的編碼,可以修改server.xml檔案中,相應的埠的Connector的屬性:URIEncoding="UTF-8

JSP-tomcat設定編碼格式 配置utf-8(以防網頁框以及網頁顯示的時候中文亂碼)

JSP-tomcat設定編碼格式 配置utf-8(以防網頁框以及網頁顯示的時候中文亂碼) 關鍵詞: tomcat配置utf-8 解決網頁中文亂碼 tomcat中server.xml配置編碼格式 jsp中設定了charset是UTF-8,但瀏覽器仍然顯示亂碼

tomcat 設定編碼格式

利用request.setCharacterEncoding("UTF-8");來設定Tomcat接收請求的編碼格式,只對POST方式提交的資料有效,對GET方式提交的資料無效!要設定GET的編碼,可以修改server.xml檔案中,相應的埠的Connector的屬性:UR

MySQL5.6中文亂碼問題,都已經設定編碼格式utf8了,居然還是中文亂碼

這幾天在學習一個demo,資料是通過.sql匯入的,在Navicat裡看到的是中文,Java讀出來之後確實亂碼,百度了很多大多都是修改字元編碼為utf8,我也改了,可是就是不行。在win7的cmd窗口裡檢視編碼是utf8的,在Navicat裡看到就確不一樣,最後確定是Navi

tomcat指定JDK和設定編碼格式

1、設定JDK 開啟Tomcat的bin目錄,(linux環境)找到catalina.sh和setclasspath.sh,在開頭新增 export JAVA_HOME=/home/java/jdk1.8 等號後面是jdk的路徑 我新增完之後一直報錯,後來返現等號前後

idea設定編碼格式UTF-8

1) File->Settings->Editor->File Encodings 這種方式修改的檔案編碼方式 只對當前 project 起作用,每次新建了一個工程後還需要重新設定編碼方式。 2) File->Other Settings->Default Sett

SecureCRT修改全域性預設編碼格式UTF8解決中文亂碼

會話級的編碼設定方式: 選項-->會話選項-->終端-->外觀-->字元編碼格式 這樣設定會有一個問題,新建一個會話需要重新設定,為了避免這種情況,需要設定會話的預設初始化選項: 需要找到SecureCRT的配置檔案:C:\Users\username\AppDa

javacv + rtsp +ffmpge 設定編碼格式 幀率

private boolean isStart = true; public void frameRecord(String inputFile, String outputFile, int audioChannel)             throws Excepti

改變tomcat編碼格式

預設情況下,tomcat使用的的編碼方式:iso8859-1 修改tomcat下的conf/server.xml檔案 找到如下程式碼:     <Connector port="8080" protocol="HTTP/1.1"  con

java視訊格式轉碼,設定編碼格式

專案上傳後的視訊不能在video標籤裡面播放,視訊格式是MP4。重新編碼之後就可以了 package com.video.util; import org.bytedeco.javacv.FFmpegFrameGrabber; import org.bytedeco.javacv.FFmpe

Ubuntu 系統解除安裝並安裝MySQL和基本配置(修改密碼,遠端登入,設定編碼格式)全過程

1. 解除安裝mysql sudo apt-get autoremove --purge mysql-server-5.7 # 根據你的mysql版本 sudo apt-get remove mysql-server sudo apt-get autoremove my

ajax請求的資料存在中文亂碼,如何設定編碼格式

先描述一下場景 1.ajax請求一個 js 字尾的介面 2.接口裡編碼用的 GBK 3.當前頁面HTML頁面編碼是 UTF-8 問題: 1.由於當前HTML頁面編碼是 UTF-8,所以在請求到資料(GBK格式)之後,放到頁面上顯示的全是亂碼 2.設定<meta cha

mysql 5.6.20的安裝、配置服務、設定編碼格式

一、安裝 安裝環境        系統:Window 32        版本:Mysql 5.6.20                        2、 我們開啟下載下來的mysql-5.6.20-win32.msi安裝包 3、 選擇Next 下一步:

VS2017控制檯輸出中文亂碼 ,怎麼設定編碼格式(utf-8)?

vs2017預設編碼方式並不是UTF-8,當我們使用中文時,經常會發生亂碼。解決方法:工具->擴充套件和更新->聯機,然後搜尋ForceUTF8,如下圖: 安裝後原始碼檔案會強制儲存為帶

【Android實戰】----Android Retrofit2.1.0設定編碼格式GBK

設定介面如下: public interface IHttpService { /** * 獲取userId * @param params * @return

"Spring"中設定編碼格式的方法

在Web.xml中加入如下配置: <filter> <filter-name>encoding</filter-name> <

Eclipse如何設定編碼格式?(3種方式)

在使用Eclipse的過程中肯定也會遇到編碼的問題。亂碼出現的原因是編碼和解碼格式的不一致造成的。(關於亂碼產生的原因,就不在這裡介紹了)下面來介紹三種方式如何設定Eclipse的編碼格式第一種:只設置當前*.java檔案的編碼格式在當前*.java檔案中,按Alt+回車,會

servlet專案 設定編碼格式

在web.xml 裡面設定 <filter> <filter-name>Set Character Encoding</filter-name> <filte

Eclipse 設定編碼格式為UTF-8

1、windows->Preferences...開啟"首選項"對話方塊,左側導航樹,導航到 general->Workspace,右側Text fileencoding,選擇Other

VS2012將新建的原始碼檔案的編碼格式自動設定UTF8

VS 2012 新建立的cpp和h檔案預設是GB2312的,為適應國際化需求,現在都使用UTF-8格式,下面教大家設定為預設UTF-8 進入vs安裝目錄的 Microsoft Visual Studio 12.0\VC\vcprojectitems 用 Notepad