2013-03-08 47 views
3
String departmentName = request.getParameter("dept_name"); 
departmentName = new String(departmentName.getBytes(Charset.forName("UTF8")),"UTF8"); 
System.out.println(departmentName);//O/p: composés 

在windows中,顯示的輸出是我期望的,並且它也獲取部門名稱匹配條件的記錄。linux中的UTF-8問題

但在Linux中它返回「compos ?? s」,所以我的數據庫查詢失敗。

任何人都可以給我解決方案嗎?

+0

您需要提供更多信息。該代碼看起來像Java ......您在Windows上使用哪種Java運行時環境,以及Linux上使用哪種Java運行時環境?究竟是一個'request' ...是一個數據庫接口類,如果是的話,哪一個呢?哪個數據庫? – steveha 2013-03-08 06:51:04

+0

請求是ServletHttpRequest對象並從Form參數獲取請求。 – user1979774 2013-03-08 06:57:38

+0

檢查'ServletHttpRequest.getCharacterEncoding()' – vertti 2013-03-08 07:02:25

回答

2

也許是因爲字符集UTF8不存在。您必須使用UTF-8。請參閱javadoc

+0

我hv將UTF8轉換爲UTF-8不工作:( – user1979774 2013-03-08 07:23:18

0

首先,使用帶有System.out.println的unicode輸出是不好的指標,因爲您正在處理控制檯編碼。用OutputStreamWriter打開文件,將編碼的明碼設置爲UTF-8,然後你可以說請求參數在編碼中是否正確。

二,可能存在數據庫連接編碼問題。對於MySQL,您需要明確指定連接字符串中的編碼,如果沒有指定,則可能也會採用默認系統編碼。

0

首先,試着找出你在每個特定地方的編碼。

例如,如果您的Linux系統使用UTF-8字符集運行,則該字符串可能已經具有正確的編碼;該攻擊可能只在Windows上需要。

最後但並非最不重要,你如何知道這是不對的?這不是你的查看器這是不正確的?你的字符集是什麼控制檯日誌查看器用法?

您需要執行一些檢查以找出,其中的編碼與您的應用程序當前的預期編碼不同。