在字符串中存储阿拉伯语并使用Java将其插入到数据库中

问题描述:

我想将阿拉伯字符串传递到函数中,将它存储到数据库中,但字符串的字符被转换为'?'在字符串中存储阿拉伯语并使用Java将其插入到数据库中

如实施例

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

输出将是:

"???" 

并存储这样在数据库中。

如果我直接插入数据库,它效果很好。

enter image description here

确保您的字符编码是UTF-8。

您显示的代码段按预期完美工作。

例如,如果你使用windows-1252编码你的源文件,它将无法工作。

+0

我怎么确定它的utf-8? 。我正在使用Ubuntu 16.04 LTS –

问题是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作为所有内容类型的默认编码