java中spring框架的頁面編碼問題集錦
解決springMVC中文亂碼問題(jsp頁面編碼為utf-8)
1. 表單提交controller獲得中文引數後亂碼解決方案
Form表單提交方式必須為post ,get方式spring過濾器不起作用
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<form action="${ctx}/user/addUser" name="userForm" method="post">
解決方案:修改web.xml,增加編碼過濾器
|
在配置連線資料庫的引數設定修改:
- <property name="url" value="jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8"></property>
第一種情況:
jsp頁面中文輸入,到controller亂碼,這時候需要設定的是在web.xml檔案中新增一個編碼的過濾器(filter)將編碼統一為UTF-8,
解決:web.xml配置檔案
<filter>
02.<filter-name>CharacterEncodingFilter</filter-name>
03.<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
04.<init-param>
05.<param-name>encoding</param-name>
06.<param-value>utf-8</param-value>
07.</init-param>
08.</filter>
09.<filter-mapping>
10.<filter-name>CharacterEncodingFilter</filter-name>
11.<url-pattern>/*</url-pattern>
12.</filter-mapping>
注意:最好把這段程式碼放在web.xml中開頭的位置,因為攔截有順序,如果放在後面的話容易攔截不到。
第二種情況:
資料庫中文資料,jsp頁面顯示亂碼(不是嚴格意義上的亂碼,而是以問號的形式呈現)
解決:由於我們前後臺的資料互動使用的是json資料,只需要在轉json的時候設定一下編碼格式就可以了
response.setContentType("application/json;charset=UTF-8");//防止資料傳遞亂碼
第三種情況:頁面中文,傳遞到controller也是正確的,但是儲存到資料庫之後就是亂碼(也不是嚴格意義的亂碼,跟上面一樣全是問號)
解決:連線資料庫時加上格式
<datasource jta="true" jndi-name="java:jboss/datasources/JcMysqlDS" pool-name="JcMysqlDS" enabled="true" use-java-context="true">
02.<connection-url>jdbc:mysql://192.168.24.46/ITOO_BASIC_BASIC?useUnicode=true&characterEncoding=UTF-8</connection-url>
03.<driver>mysql</driver>
04.<pool>
05.<prefill>false</prefill>
06.<use-strict-min>false</use-strict-min>
07.<flush-strategy>FailingConnectionOnly</flush-strategy>
08.</pool>
09.<security>
10.<user-name>root</user-name>
11.<pass<a href="http://www.it165.net/edu/ebg/" target="_blank" class="keylink">word</a>>123456</pass<a href="http://www.it165.net/edu/ebg/" target="_blank" class="keylink">word</a>>
12.</security>
13.</datasource>
2. Java亂碼問題:
1.頁面亂碼
在相應的jsp頁面或者html頁面設定相關的字符集即可
<%@page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
2.傳值亂碼
第一種解決方案:
<!-- 配置請求過濾器,編碼格式設為UTF-8,避免中文亂碼--> <filter> <filter-name>springUtf8Encoding</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> |
第二種解決方案:
設定request字符集
①先列印request本身預設的字符集
System.out.println(request.getCharacterEncoding());
②列印的不是需要的字符集,則設定相應的字符集即可
request.setCharacterEncoding("UTF-8");
③如果2處理不了就用這個解決
String str=newString((request.getParameter("bigQuestionTypeName")).getBytes("iso-8859-1"),"utf-8")
3.存入資料庫亂碼
①標準情況會在相應的後面加上相應的字符集設定
jdbcUrl=jdbc:mysql:///itcastoa?useUnicode=true&characterEncoding=UTF-8
useUnicode就不用說了,連線資料庫中設定的字符集,&這是什麼的?這就有問題了,在xml中&是&的轉義字元。如果你是用xml來配置對應的資料庫連線配置的話就沒有什麼問題了。但是如果用的是**.properties就有問題了,則必須將amp除去即可。
②資料庫
分別設定伺服器、資料庫和資料表部分的編碼,必須設定連線編碼
mysql> SET character_set_client='gbk';
mysql> SET character_set_connection='gbk'
mysql> SET character_set_results='gbk'
設定好連線編碼,就可以插入中文。(其實用一句話就可以解決了)
檢視資料庫編碼格式
show variables like 'character_set_%';
檢視資料庫中的表的建立
show create table tablename;
設定資料庫編碼格式
setnames 'gbk';
2018年11月12日19:53:38