eclipse中的亂碼問題


  

在新建項目或導入工程時常常遇到的問題:

1.導入工程后,Java文件中文亂碼

  項目右鍵--Properties--Resource(快捷鍵Alt+Enter),在Text file encoding中默認的編譯語言是GBK,選擇源項目需要的編譯語言,中文亂碼一般是utf-8。這種方法修改的是此項目的編譯語言。

   如果通過菜單中的File--Properties,Resource設置的是eclipse的默認編程語言。

  還可參考:https://blog.csdn.net/ordinaryprogrammerc/article/details/83013710

2.Java的web項目中jsp文件在運行時中文亂碼

  這一般是因為我們在新建.jsp文件時,默認編寫字符集的格式是:ISO-8859-1時,出現的中文亂碼。

   
   解決的方式一:編寫index.jsp文件時,將其字符集改為UTF-8,並且網頁顯示的pageEncoding=UTF-8.如下圖所示。
   

  解決方式二: 

  先進Window——preferences——General——Workspace——Text file encoding修改為other選項,然后設置自己需要的編碼格式。
  在Eclipse中的Window——preferences——Content Type——Text——JSP會顯示Defalut encoding 將其改為自己需要的編碼格式即可。
   解決方式三:
  修改tomcat/bin/catalina.sh文件,在JAVA_OPTS變量后新增以下參數:-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8,然后重啟tomcat即可。
 3.編碼格式簡析
   字符編碼發展簡史:https://blog.csdn.net/dk_0520/article/details/70157426
       概括來講:
       (1)計算機由美國發明,他們的語言為英文,所以計算機編碼也是使用的英文字符,也就是最初的ASCII(美國信息交換標准代碼),它為7位,可編碼2 7=128個字符。
       (2)計算機不斷發展,人們又填入了橫線、豎線等的符號,所以128-255稱為“擴展字符集”;
       (3)計算機發展至中國,中國人們為了加入漢字,重新進行編碼,保留了ASCII的前127個字符,后采用2Byte繼續編碼,連在 ASCII 里本來就有的數字、標點、字母都統統重新編了兩個字節長的編碼,這就是常說的”全角”字符,而原來在127號以下的那些就叫”半角”字符了。這就是我們所說的 GB2312.
       (4)繼續擴展之后的編碼方案被稱為  GBK 標准,GBK 包括了 GB2312 的所有內容,同時又增加了近20000個新的漢字(包括繁體字)和符號。后來少數民族也要用電腦了,於是我們再擴展,又加了幾千個新的少數民族的字, GBK 擴成了  GB18030
       (5)后來,因為當時各個國家都像中國這樣搞出一套自己的編碼標准,結果互相之間誰也不懂誰的編碼,誰也不支持別人的編碼。就在這時, ISO (國際標誰化組織)決定着手解決這個問題。他們采用的方法很簡單:廢了所有的地區性編碼方案,重新搞一個包括了地球上所有文化、所有字母和符號的編碼!他們打算叫它”Universal Multiple-Octet Coded Character Set”,簡稱 UCS, 俗稱 “ UNICODE”。
        (6)UNICODE 來到時,一起到來的還有 計算機網絡的興起,UNICODE 如何在網絡上傳輸也是一個必須考慮的問題,於是面向傳輸的眾多 UTF(UCS Transfer Format)標准出現了, UTF8 就是每次8個位傳輸數據,而  UTF16 就是每次16個位,只不過為了傳輸時的可靠性,從UNICODE到 UTF時並不是直接的對應,而是要過一些 算法和規則來轉換。
 
   為什么將字符集格式從:ISO8859-1改成UTF-8就不會出現中文亂碼呢?
  因為ISO8859-1屬於單字節編碼,最多能表示的字符范圍是0-255,應用於英文系列。比如,字母a的編碼為0x61=97。
  很明顯,iso8859-1編碼表示的字符范圍很窄,無法表示中文字符。但是,由於是單字節編碼,和計算機最基礎的表示單位一致,所以很多時候,仍舊使用iso8859-1編碼來表示。而且在很多協議上,默認使用該編碼。比如,雖然”中文”兩個字不存在iso8859-1編碼,以gb2312編碼為例,應該是”d6d0 cec4”兩個字符,使用iso8859-1編碼的時候則將它拆開為4個字節來表示:”d6 d0 ce c4”(事實上,在進行存儲的時候,也是以字節為單位處理的)。而如果是UTF編碼,則是6個字節”e4 b8 ad e6 96 87”。很明顯,這種表示方法還需要以另一種編碼為基礎。
  UTF字符集考慮到unicode編碼不兼容iso8859-1編碼,而且容易占用更多的空間:因為對於英文字母,unicode也需要兩個字節來表示。所以unicode不便於傳輸和存儲。因此而產生了utf編碼,utf編碼兼容iso8859-1編碼,同時也可以用來表示所有語言的字符,不過,utf編碼是不定長編碼,每一個字符的長度從1-6個字節不等。另外,utf編碼自帶簡單的校驗功能。一般來講,英文字母都是用一個字節表示,而漢字使用三個字節。
注意,雖然說utf是為了使用更少的空間而使用的,但那只是相對於unicode編碼來說,如果已經知道是漢字,則使用GB2312/GBK無疑是最節省的。不過另一方面,值得說明的是,雖然utf編碼對漢字使用3個字節,但即使對於漢字網頁,utf編碼也會比unicode編碼節省,因為網頁中包含了很多的英文字符。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM