我正在尝试将阿拉伯字符串传递给函数,将其存储到数据库中,但字符串的字符转换为'?'
例如
String str = new String();
str = "عشب";
System.out.print(str);
输出将是:
"???"
并将其存储在数据库中。
如果我直接插入数据库,它运作良好。
答案 0 :(得分:1)
确保您的字符编码为utf-8。
您展示的代码段完全符合预期。
例如,如果您使用Windows-1252对源文件进行编码,则无法正常工作。
答案 1 :(得分:0)
问题是System.out.println是PrintWriter,它使用默认编码将阿拉伯字符串转换为字节;大概无法处理阿拉伯字符。尝试
System.out.write(str.getBytes("UTF-8"));
System.out.println();
答案 2 :(得分:0)
许多现代操作系统使用UTF-8作为默认编码,它将正确支持非拉丁字符。 Windows不是其中之一,ANSI是西方安装的默认设置(我最近没有使用过Windows,所以可能已经改变了)。无论哪种方式,您都应该强制Java进程的默认字符编码,而不管平台。
如另一个Stackoverflow问题(请参阅Setting the default Java character encoding?)中所述,对于Java进程,您需要更改默认值,如下所示:
java -Dfile.encoding=UTF-8
此外,由于您在IDE中运行,您可能需要告诉它在指示的字符集中显示输出或存在损坏风险,尽管这是特定于IDE的,具体说明取决于您的IDE。
另一件事是,如果您正在阅读或编写文本文件,那么您应该始终指定预期的字符编码,否则您将冒险回到平台默认值。
答案 3 :(得分:0)
您需要为此设置字符集utf-8。
在java级别你可以这样做:
Charset.forName("UTF-8").encode(myString);
如果你想在IDE级别这样做,那么你可以这样做:
窗口>偏好>一般>内容类型,将UTF-8设置为所有内容类型的默认编码。