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中),如下
- <filter>
- <filter-name>encodingFilter</filter-name>
- <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>utf-8</param-value>
- </init-param>
- <init-param>
- <param-name>forceEncoding</param-name>
- <param-value>true</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>encodingFilter</filter-name>
- <servlet-name>appkit</servlet-name>
- </filter-mapping>
應該不是Spring的問題,應該是Tomcat的問題,然後去修改Tomcat的配置檔案server.xml,新增URIEncoding="UTF-8"
- <Connector port="8080" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443"
- 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