2017-09-04 1 views
0

アラビア文字列を関数に渡してデータベースに格納しようとしていますが、文字列のCharsは '?'アラビア語をStringに格納し、Javaを使用してデータベースに挿入します

出力がされる

String str = new String(); 
str = "عشب"; 
System.out.print(str); 

例として:

"???" 

、それがデータベースにこのような記憶されています。

データベースに直接挿入するとうまく動作します。

enter image description here

答えて

1

あなたの文字エンコーディングがUTF-8であることを確認してください。

あなたが見せたスニペットは、期待通りに機能します。

たとえば、windows-1252を使用してソースファイルをエンコードする場合、それは機能しません。

+0

どうすればutf-8を確実に確認できますか? 。私はUbuntu 16.04 LTSで作業しています –

0

問題は、System.out.printlnがアラビア文字列をデフォルトのエンコードを使用してバイトに変換するPrintWriterであることです。おそらくアラビア語の文字を処理することはできません。お試しください

System.out.write(str.getBytes("UTF-8")); 
System.out.println(); 
0

最新のオペレーティングシステムの多くは、非ラテン文字を正しくサポートするデフォルトのエンコードとしてUTF-8を使用しています。 Windowsは、ANSIが西洋のインストールではデフォルトである(私は最近Windowsを使用していないため、変更されている可能性があります)。どちらの方法でも、プラットフォームに関係なく、Javaプロセスのデフォルト文字エンコーディングを強制する必要があります。

別のStackOverflowの質問で説明したように(Setting the default Java character encoding?を参照してください)、あなたはJavaプロセスのために、次のようにデフォルトを変更する必要があります。また

java -Dfile.encoding=UTF-8 

、あなたはIDEで実行されているので、あなたがする必要があるかもしれません指示された文字セットまたは危険な破損の出力を表示するように指示します。これはIDE固有であり、正確な指示はIDEによって異なります。

もう1つのことは、テキストファイルを読み書きする場合は、常に期待される文字エンコーディングを指定する必要があります。そうしないと、プラットフォームのデフォルトに落ちる危険性があります。

0

これには文字セットutf-8を設定する必要があります。あなたが行うことができますJavaのレベルで

Charset.forName("UTF-8").encode(myString); 

あなたはIDEレベルでそうしたいなら、あなたが行うことができます:

ウィンドウ>設定>一般>コンテンツタイプは、UTF-8を設定しますすべてのコンテンツタイプのデフォルトエンコードとして

関連する問題