我想將阿拉伯字符串傳遞到函數中,將它存儲到數據庫中,但字符串的字符被轉換爲'?'在字符串中存儲阿拉伯語並使用Java將其插入到數據庫中
如實施例
String str = new String();
str = "عشب";
System.out.print(str);
輸出將是:
"???"
並存儲這樣在數據庫中。
如果我直接插入數據庫,它效果很好。
我想將阿拉伯字符串傳遞到函數中,將它存儲到數據庫中,但字符串的字符被轉換爲'?'在字符串中存儲阿拉伯語並使用Java將其插入到數據庫中
如實施例
String str = new String();
str = "عشب";
System.out.print(str);
輸出將是:
"???"
並存儲這樣在數據庫中。
如果我直接插入數據庫,它效果很好。
確保您的字符編碼是UTF-8。
您顯示的代碼段按預期完美工作。
例如,如果你使用windows-1252編碼你的源文件,它將無法工作。
問題是System.out.println是PrintWriter,它使用默認編碼將阿拉伯字符串轉換爲字節;這大概無法處理阿拉伯字符。嘗試
System.out.write(str.getBytes("UTF-8"));
System.out.println();
許多現代操作系統使用UTF-8作爲默認編碼,它將正確支持非拉丁字符。 Windows不是其中之一,ANSI是西方安裝的默認設備(我最近沒有使用過Windows,所以可能已經改變了)。無論哪種方式,您都應該強制執行Java進程的默認字符編碼,而不考慮平臺。
正如另一個問題#1(見Setting the default Java character encoding?),你需要更改默認如下,供Java進程描述:
java -Dfile.encoding=UTF-8
此外,由於你在IDE中運行,您可能需要告訴它在顯示的字符集中顯示輸出或者冒風險,儘管這是特定於IDE的,確切的說明將取決於你的IDE。
另一件事是,如果您正在閱讀或編寫文本文件,那麼您應該始終指定預期的字符編碼,否則您將面臨退回到平臺默認值的風險。
您需要爲此設置字符集utf-8。
在java的水平,你可以這樣做:
Charset.forName("UTF-8").encode(myString);
如果你想在IDE級別這樣做,那麼你可以這樣做:
窗口>首選項>常規>內容類型,設置UTF-8作爲所有內容類型的默認編碼。
我怎麼確定它的utf-8? 。我正在使用Ubuntu 16.04 LTS –