Java Web開發中文亂碼問題

Codeagles發表於2018-07-10

版權宣告:本文為 Codeagles 原創文章,可以隨意轉載,但必須在明確位置註明出處!!!

對於剛開始接觸JavaWeb專案的新鳥來說,亂碼一直都是個頭疼的問題,不清楚EL表示式取值為什麼會亂,不知道為什麼jsp顯示會亂碼,明明顯示jsp中取值正常,傳到後臺用java取值又亂了。那麼本文可以說是解決了常見的亂碼問題。

亂碼常見地方如下:

  • jsp頁面中。EL表示式或者直接取值,哪怕寫個固定的中文顯示都會亂。
  • java程式碼。前端到後端傳輸值,亂碼。
  • 資料庫的編碼格式。資料庫編碼格式不統一,導致插入資料庫的時候也會出現亂碼。
  • 檔案編碼格式。一般在IDE中就可以設定。
  • Servlet容器—Tomcat。在執行jsp需要藉助Tomcat,那麼還需要將Tomcat進行編碼格式設定。

理解了這幾個常見地方,就對症下藥更改編碼格式就OK了,我們統一編碼為UTF-8。

  • jsp頁面編碼。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
複製程式碼

只要寫jsp的都不陌生,更改頁面的字符集。

  • java後臺程式碼。 如果是java web專案,那麼可以對應在post和get方式獲取值的時候設定編碼格式。
    • POST方式
request.setCharacterEncoding("utf-8");
複製程式碼
  • GET方式
request.setCharacterEncoding("utf-8");
//例如獲取頁面的username值進行轉換
String username =new String(request.getParameter("username").getBytes("iso8859-1"),"utf-8");
複製程式碼
  • 資料庫編碼。 該編碼一般來說比較簡單。為了避免出現問題,我們可以注意兩個地方,用Mysql舉例來說。
    • 第一種,在建立資料庫的時候,將編碼設定好。
      資料庫編碼
    • 第二種,在程式碼的資料庫連線url中填寫編碼格式。這個方式適用於Mysql資料庫,其他資料庫用第一種在本地設定編碼也可。
 <!-- 資料庫連線池,由 Mybatis 管理,資料庫名是 mybatis,MySQL 使用者名稱 root,密碼為root -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
複製程式碼
  • 檔案編碼。檔案編碼比較簡單,進入到IDE中,右鍵專案->Properties
    檔案編碼
    基本上可以解決亂碼問題。當然從外部匯入專案時,與環境編碼不一樣也會導致錯誤,用該方法依然可以解決。
  • Tomcat編碼。此處也是最為重要的,一般頁面編碼,java編碼都設定過(甚至建立一個web工程,但是沒有jsp到Java的取值過程,如建立java類建立main方法,輸出中文,執行都會亂碼),此時還亂碼就需要設定Tomcat編碼格式。找到Tomcat安裝資料夾->conf資料夾->server.xml
    server.xml路徑
    開啟xml檔案,大約70行左右。原檔案是沒有紅色框中``` URIEncoding="UTF-8"
![Tomcat編碼](http://upload-images.jianshu.io/upload_images/3305482-4b8205a529d4b005.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

至此,web專案中亂碼常見問題以及出現問題為位置都可以搞定了。如果後續遇到上述辦法解決不了的,會繼續更新文章指出。



複製程式碼

相關文章