網上找了很多資料才找到解決的方法,通過URL傳遞命名參數,后臺接收的卻是亂碼解決方法如下:
方法一:將接收的參數重新編碼
@RequestMapping(value="/handle")
public String handle81(@RequestParam("userName") String userName){
userName=new String(userName.getBytes("ISO-8859-1"), "UTF-8")
modelMap.put("userName", userName);
return "/user/showUser";
}
方法二:在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>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
方法三:修改tomcat的server.xml(在conf文件下),找到下面代碼添加URIEncoding編碼。
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
最終我的解決方法時方法二和方法三同時用,沒用方法一才解決@RequestParam亂碼問題。
另外表單提交時出現亂碼解決方法如下:
一、首先將Eclipse文件編碼是UTF-8:Windows——Preference——General——Workspace——Text file encoding改為UTF-8.
二、設置頁面編碼
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%> <% request.setCharacterEncoding("utf-8"); %>
三、將form表單提交方式變為post方式,即添加method="post"
四、在action類中,添加3句話
request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=utf-8"); response.setCharacterEncoding("UTF-8");
五、將接收到的數據轉碼
String name = new String(request.getParameter(“name”).getBytes("ISO-8859-1"),"utf-8");
六、post提交方式下可進行URL編碼:
String info=java.net.URLEncoder.encode("你好嗎.jpg","utf-8");
http://localhost:8080/webTest/index.jsp?name=<%=URLEncoder.encode("張三","UTF-8")%>
String myname=URLDecoder.decode(name,"UTF-8");
歡迎工作一到五年的Java工程師朋友們加入Java技術交流群:659270626
群內提供免費的Java架構學習資料(里面有高可用、高并發、高性能及分布式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!
做一個積極的人
編碼、改bug、提升自己
我有一個樂園,面向編程,春暖花開!
最近剛使用IDEA,在開發一個功能的時候,開始使用Jetty作為容器進行web項目開發,測試通過。然后想了一下線上服務器使用的容器是Tomcat,還是用Tomcat跑一下項目在測試一下,本地和服務器使用相同的容器,這個可以避免因為容器不同而導致本地測試通過,而上線又出現莫名的錯誤~! 就在我從Jetty切換到Tomcat,就發生了問題,訪問JSP頁面使用response輸出,出現了亂碼!!!
就是下面這些東東:(這是什么啊!萌幣中。。。。。)
????? ????? ????? ????? ????? ????? ?????
這很是郁悶,本想著一次性測試通過,沒想到這里又讓我停留! 看到亂碼,心里不要害怕,不要緊張!冷靜下來進行分析,看哪里出現問題!
開始思考:
0:數據庫(mysql)---utf-8
show variables like 'character%'
character_set_client utf8 character_set_connection utf8 character_set_database utf8 character_set_filesystem binary character_set_results utf8 character_set_server utf8 character_set_system utf8 character_sets_dir /aebiz/soft/mysql/share/charsets/
1:Tomcat---utf-8
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8888" protocol="HTTP/1.1" redirectPort="8443"/>
2:jsp --- utf-8
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
3:web.xml---utf-8
<filter> <filter-name>CharacterEncodingFilter</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> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
4:request和response
request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8");
5:java代碼字符串編碼
str = tmpWriter.getByteArrayOutputStream().toString("utf-8");
全部都檢查過之后,發現全部是utf-8。大寫的一個懵字,全部是utf-8怎么還是會有亂碼出現呢?
好憂傷,難道是還有什么地方沒有設置嗎,我一想,是不是IDEA結合Tomcat編碼設置有問題導致的呢?按照這個思路發現奇跡就在前面!
在配置Tomcat的時候添加一些參數。如下(開始是沒有設置-Dfile.encoding=UTF-8)
-server -Xms1024m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+CMSClassUnloadingEnabled -XX:+PrintGCDetails -Xloggc:%M2_HOME%/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%M2_HOME%/java_pid.hproyuan
用搜索引擎發現下面博文:Eclipse、IDEA環境下設置jvm默認編碼
于是添加VM參數添加
-Dfile.encoding=UTF-8
配置參數就是
-server -Xms1024m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+CMSClassUnloadingEnabled -XX:+PrintGCDetails -Xloggc:%M2_HOME%/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%M2_HOME%/java_pid.hproyuan -Dfile.encoding=UTF-8
啟動發現頁面亂碼不見了,可是控制臺有出現了亂碼,亂碼真是 生生不息 啊!
于是配置idea安裝目錄下的bin文件夾,idea.exe.vmoptions文件中
添加一條配置信息:-Dfile.encoding=UTF-8
so,一切都解決了!完美!
謝謝你的閱讀,如果您覺得這篇博文對你有幫助,請點贊或者喜歡,讓更多的人看到!祝你每天開心愉快!
不管做什么,只要堅持下去就會看到不一樣!在路上,不卑不亢!
愿你我在人生的路上能都變成最好的自己,能夠成為一個獨擋一面的人
? 每天都在變得更好的阿飛云
我們舒舒服服寫代碼的過程中會遇到很多問題[淚奔],最頭疼的不是沒思路,而是有錯不知道咋改。暈死。有時候我們在eclipse當中轉載一個項目時,會發現有好多錯誤,這些錯誤往往讓我們欲罷不能,頭疼欲裂。[泣不成聲][泣不成聲]
這里我們就引入一個項目來解決觸發的問題:
問題一:引入項目報錯
(上圖需要查看的compiler)
問題二:亂碼問題報錯
啟動項目的時候會發現出現亂碼,可是項目中又對項目編碼進行了處理,那么問題是出在了哪里呢?
答案是:tomcat的配置文件中
在我們eclipse里找到開啟的服務器,他下面的兩個配置文件server.xml和web.xml進行修改配置
畫出來部分是本沒有的,是我們后來需要添加進去的
打開我們的地址,發現亂碼解決了!!!激動!!(PS:如果還是亂碼,清除緩存再刷新一下試一下喔)[看]
以上就是對這兩個問題的解決,小編也是通過查閱資料實踐總結的,可能有些不全面歡迎各位補充~
感謝各位的觀看[吐舌]
解決亂碼問題原文參考轉載CSDN:
https://blog.csdn.net/iBuDongIt/article/details/89492517
*請認真填寫需求信息,我們會在24小時內與您取得聯系。