java web 傳智書城項目中文亂碼問題的解決

  • 引入JS文件造成的亂碼問題

  • Filter造成的亂碼問題

  • 信息輸出到數據庫造成的亂碼問題

    起初遇到這些亂碼問題的時候,還以爲是一個方面的問題導致的亂碼。但是在解決一個亂碼,又碰到另一個亂碼的時候,真的是感覺幹啥啥不行,亂碼第一名。


    引入JS文件亂碼

  • 第一次遇見是在註冊頁面,源代碼裏在是一個 innerHTML中,源文件中發現之後,首先改了一下innerHTML 的值,發現英文可以正常顯示。F12檢查一下,結果發現引入的JS文件中所有的中文都是亂碼。 打開Eclipse查看我們的JS源文件,中文顯示正常,但是在 檢查 中發現引入的文件中文都是亂碼,查看編碼方式,文件中是UTF-8,頁面的編碼方式也是UTF-8,那麼問題出現在哪裏了呢? 問了老師,問了百度,最終在歷經千辛萬苦之後,找到了正確方法!

  • 首先建立一個txt文件,將JS文件代碼全部複製,之後在txt文本文件中把JS文件中的代碼粘貼過來,把編碼方式設置爲 帶BOM的UTF-8。然後重命名並覆蓋源文件,重啓tomcat服務器,就可以發現提示的文字已經從亂碼變成中文了!


Filter造成的亂碼問題

首先貢獻出地址欄:


category=學術

  • 在使用request.getParameter(「category」)時,對照我們地址欄的信息可以發現我們的category=學術,同時我們爲了顯示方便,要把頁面做成下面的效果:

在這裏插入圖片描述

但是,如果我們用了Filter處理了GET和POST請求的亂碼,那麼我們這個時候就會發現一些問題,原本需要的頁面效果沒有出來,出來的卻是這樣的效果:

在這裏插入圖片描述

看到這??,我腦門上就是??,怎麼就出現這種情況了呢?由於這個我們在做這個項目之前爲了防止中文亂碼寫了一個EncodingFilter,當然,遇到這麼多中文亂碼問題的時候我也懷疑過這個Filter的實用性,但是沒有進行更改。後來在老師和同學的幫助下,想起來我用的服務器是tomcat 8.5,已經不是8.0以前的版本了,GET方法(我的Servlet都寫在GET方法裏了 )的編碼方式已經默認是UTF-8了,而我的EncodingFilter中又對GET方法進行處理,把GET方法的編碼默認爲 ISO-8859-1 ,強行轉碼,所以造成了request獲取亂碼,在EncodingFilter中把這些東西註釋掉就可以了。

values[i] = new String(values[i].getBytes("ISO-8859-1"),"utf-8");


數據庫的亂碼

  • 在測試新增後臺公告和添加修改商品信息的時候發現的這個問題,當然那個時候request的亂碼問題還沒有解決,我就把他們當做是一種亂碼問題了,但是當我解決了前一個亂碼問題,發現這個亂碼問題還是沒有解決的時候,心態瞬間有些炸裂。打開我的數據庫,查看一下我添加的數據,發現數據庫添加的信息就直接是亂碼了。
  • 在這裏插入圖片描述
  • 這裏你會發現,在公告內容裏其實是有中文的,但是爲什麼我們調用Servlet添加的信息就會出現亂碼呢,在Navicat中我直接添加數據,是可以直接添加中文的,如果你不能添加中文的話就看看再你的數據庫中字符集是什麼樣的。

在這裏插入圖片描述

  • 綜合起來這些因素,想到是不是在連接數據庫的時候,我們的配置文件裏少了點什麼東西呢,打開我們的配置文件, 找到這一行,在name中把我們使用的數據庫設置編碼格式,添加成爲這樣的形式就能解決數據庫連接的亂碼問題了!
  • 在這裏插入圖片描述