『壹』 淺談如何解決java/JSP中文亂碼問題
原因主要有兩方面,Java和JSP文件本身編譯時產生的亂碼問題和Java程序於其他媒介交互產生的亂碼問題。首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基於位元組流的,如果Java和JSP編譯成class文件過程中,使用的編碼方式與源文件的編碼不一致,就會出現亂碼。基於這種亂碼,建議在Java文件中盡量不要寫中文(注釋部分不參與編譯,寫中文沒關系),如果必須寫的話,盡量手動帶參數-ecoding GBK或-ecoding gb2312編譯;對於JSP,在文件頭加上或基本上就能解決這類亂碼問題。本文要重點討論的是第二類亂碼,即Java程序與其他存儲媒介交互時產生的亂碼。很多存儲媒介,如資料庫,文件,流等的存儲方式都是基於位元組流的,Java程序與這些媒介交互時就會發生字元(char)與位元組(byte)之間的轉換,具體情況如下:從頁面form提交數據到java程序 byte->char從java程序到頁面顯示 char?>byte從資料庫到java程序 byte?>char從java程序到資料庫 char?>byte從文件到java程序 byte->char從java程序到文件 char->byte從流到java程序 byte->char從java程序到流 char->byte如果在以上轉換過程中使用的編碼方式與位元組原有的編碼不一致,很可能就會出現亂碼。二、Java/JSP中文亂碼的解決方法前面已經提到了Java程序與其他媒介交互時字元和位元組的轉換過程,如果這些轉換過程中容易產生亂碼。解決這些亂碼問題的關鍵在於確保轉換時使用的編碼方式與位元組原有的編碼方式保持一致,下面分別論述(Java或JSP自身產生的亂碼請參看第一部分)。1、JSP與頁面參數之間的亂碼JSP獲取頁面參數時一般採用系統默認的編碼方式,如果頁面參數的編碼類型和系統默認的編碼類型不一致,很可能就會出現亂碼。解決這類亂碼問題的基本方法是在頁面獲取參數之前,強制指定request獲取參數的編碼方式:request.setCharacterEncoding("GBK")或 request.setCharacterEncoding("gb2312")。如果在JSP將變數輸出到頁面時出現了亂碼,可以通過設置 response.setContentType("text/html;charset=GBK")或 response.setContentType("text/html;charset=gb2312")解決。如果不想在每個文件里都寫這樣兩句話,更簡潔的辦法是使用Servlet規范中的過慮器指定編碼,過濾器的在web.xml中的典型配置和主要代碼如下:web.xml: CharacterEncodingFilter net.vschool.web.CharacterEncodingFilter encodingGBK CharacterEncodingFilter /* CharacterEncodingFilter.java: public class CharacterEncodingFilter implements Filter { protected String encoding = null; public void init(FilterConfig filterConfig) throws ServletException { this.encoding = filterConfig.getInitParameter("encoding"); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding(encoding); response.setContentType("text/html;charset="+encoding); chain.doFilter(request, response); } } 2、Java與資料庫之間的亂碼大部分資料庫都支持以unicode編碼方式,所以解決Java與資料庫之間的亂碼問題比較明智的方式是直接使用unicode編碼與資料庫交互。很多資料庫驅動自動支持unicode,如Microsoft的SQLServer驅動。其他大部分資料庫驅動,可以在驅動的url參數中指定,如如mm的mysql驅動:jdbc:mysql://localhost /WEBCLDB?useUnicode=true&characterEncoding=GBK。3、Java與文件/流之間的亂碼Java讀寫文件最常用的類是 FileInputStream/FileOutputStream和FileReader/FileWriter。其中FileInputStream 和FileOutputStream是基於位元組流的,常用於讀寫二進制文件。讀寫字元文件建議使用基於字元的FileReader和 FileWriter,省去了位元組與字元之間的轉換。但這兩個類的構造函數默認使用系統的編碼方式,如果文件內容與系統編碼方式不一致,可能會出現亂碼。在這種情況下,建議使用FileReader和FileWriter的父類:InputStreamReader/OutputStreamWriter,它們也是基於字元的,但在構造函數中可以指定編碼類型:InputStreamReader(InputStream in, Charset cs) 和OutputStreamWriter(OutputStream out, Charset cs)。4、其他上面提到的方法應該能解決大部分亂碼問題,如果在其他地方還出現亂碼,可能需要手動修改代碼。解決Java亂碼問題的關鍵在於在位元組與字元的轉換過程中,你必須知道原來位元組或轉換後的位元組的編碼方式,轉換時採用的編碼必須與這個編碼方式保持一致。
『貳』 在java中怎樣處理中文亂碼的問題(有幾種處理方式)
讀取文件的時候如果是用的read方法(位元組流),碰到中文輸出就是亂碼,然後存儲的時候設置下編碼為GBK或者是UTF-8形式即可,可以有效的解決亂碼問題。
可以通過BufferedReader 流的形式進行流緩存,之後通過readLine方法獲取到緩存的內容。
BufferedReader bre = null;
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此時獲取到的bre就是整個文件的緩存流
while ((str = bre.readLine())!= null) // 判斷最後一行不存在,為空結束循環
{
System.out.println(str);//原樣輸出讀到的內容
};
備註: 流用完之後必須close掉,如上面的就應該是:bre.close(),否則bre流會一直存在,直到程序運行結束。
可以通過「FileOutputStream」創建文件實例,之後過「OutputStreamWriter」流的形式進行存儲,舉例:
OutputStreamWriter pw = null;//定義一個流
pw = new OutputStreamWriter(new FileOutputStream(「D:/test.txt」),"GBK");//確認流的輸出文件和編碼格式,此過程創建了「test.txt」實例
pw.write("我是要寫入到記事本文件的內容");//將要寫入文件的內容,可以多次write
pw.close();//關閉流
備註:文件流用完之後必須及時通過close方法關閉,否則會一直處於打開狀態,直至程序停止,增加系統負擔。
『叄』 Java代碼出現了亂碼怎麼辦
運行java帶有中文的枝燃代碼就出現亂碼,解決方式如下:辯塌
設置整個猛灶虛java工程的編碼格式為utf-8,如下圖:
設置html的編碼格式為utf-8
『肆』 eclipse java代碼中文亂碼怎麼解決
您好,將別人的項目或JAVA文件導入到自己的Eclipse中時,常常會出現JAVA文件的中文注釋變成亂碼的情況,主要原因就是別人的IDE編碼格式和自己的Eclipse編碼格式不同。
總結網上的建議和自己的體會,可以參考以下幾種解決方式:
1
改變整個文件類型的編碼格式
1)
eclipse->window->preferences->General->Content
Types
2)
找到要修改的文件的類型(JAVA,JSP等等),在下面有個Default
encoding,在輸入框中輸入GBK
3)
點擊Update
4)
點擊OK
5)
重啟eclipse
2
改變整個Eclipse工作空間的編碼格式
1)
eclipse->window->preferences->General->workspaceTypes
2)
改變文本文件編碼格式為GBK
3
改變單個文件的編碼格式
,在包資源管理器右鍵點擊文件->屬性,改變文本文件編碼格式為GBK
4
如果以上幾種方式仍不能解決,可以下面這個不得已的辦法:
用Editplus打開要轉碼的文件,如果在Editplus中沒有亂碼,可直接將文件內容拷貝到Eclipse中,如果Editplus也有亂碼,可先
在Editplus轉碼,Editplus->文檔->文件編碼方式->改變文件編碼方式->GBK,然後再用Eclipse打
開就可以了。
5,打開Eclipse,有時候會出現中文注釋亂碼,這是因為Eclipse中對Text
file
encoding的默認編碼是GBK,因此,右鍵點擊你的「工程」,將Info中的「Text
file
encoding」中的Other改為UTF-8,即可!
『伍』 如何解決Java項目中的中文亂碼
一. 設置工作空間的編碼
1. 編輯器的編碼會影響到所有的項目中的字元的顯示,可以說是作用最為廣泛的設置,每一個項目都會受到這個設置的影響。點擊菜單欄中的窗口(Window)— —選項(Preferences)。
2. 點擊常規(General)— —工作空間(Wordspace),然後在右側的文本文件編碼格式(Text file encoding)中選擇你想要設置的編碼格式,系統默認的格式為GBK。
二. 設置項目的編碼
1. 如果其他的項目中不存在亂碼問題,只是個別項目顯示時出現亂碼,那麼我們不需要設置工作空間的編碼,只需要修改項目的編碼即可。
2. 選中項目後,右鍵點擊,在彈出的菜單中點擊屬性(Properties)。
3. 在彈出的屬性窗口中,選擇資源(Resource)— —點擊選擇Other(其他),然後選擇你想要的編碼格式。
三. 設置單個文件的編碼
1. 只是個別文件出現了亂碼,那麼設置個別文件的編碼格式就可以解決問題了。選中有亂碼的文件,然後點擊右鍵。
2. 在彈出的菜單中選擇屬性(Properties)。
3. 在彈出的屬性窗口中選擇資源,點擊Other(其他)後設置個別文件的編碼方式。
『陸』 java代碼中這種問號菱形亂碼,該怎麼解決求大神指教
這個是漢字的編碼問題啊!
你在「Package Explorer」中找到這個文件,然後右鍵選擇「Properties」菜單,
看看目前打開這個文件的用的編碼方式是啥子,然後選擇成你文件的編碼!
比如說你文件是GBK編碼的,但是你用UTF-8編碼打開這個文件就顯示這種亂碼