1. 程式人生 > >java中spring框架的頁面編碼問題集錦

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,增加編碼過濾器

  1. <filter>  
  2. <filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name>  
  15. <url-pattern>/*</url-pattern>  
  16. </filter-mapping>  

 

 

在配置連線資料庫的引數設定修改:

  1. <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