在字符串中存储阿拉伯语并使用Java将其插入到数据库中
问题描述:
我想将阿拉伯字符串传递到函数中,将它存储到数据库中,但字符串的字符被转换为'?'在字符串中存储阿拉伯语并使用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 –