我正在尝试将阿拉伯字符保存到Oracle 11g数据库中。当我坚持使用阿拉伯字符串时,它们会成功保存,但在数据库中它们会显示为问号???????。
我搜索并发现问题可能与数据库编码有关,但我认为可能不是这样,因为我能够从SQLDeveloper编写阿拉伯字符串并提交DB,它在DB表中正确显示。此外,当我检索该字段并将其显示在屏幕上时,它会正确显示。
因此,我得出结论,DB识别阿拉伯语,那里没有问题。我尝试设置客户端/服务器区域语言设置仍然没有解决问题。
阅读this帖子并尝试其建议后,我发现问题可能在于持久层,它无法正确处理阿拉伯字符。解决方法是什么?
我不确定这是一个多余的问题,但我很绝望。任何帮助/建议表示赞赏。
我正在使用的系统:
服务器:Oracle Thin 11g
IDE:带有JSF 1.2的IBM WebSphere Integration Developer
注意:还是初学者。
修改
插入代码:
String a = "اشتغل";
byte[] b = a.getBytes("UTF-8");
String c = new String(b,"UTF-8");
localLgInst.setBdStatus(c);
System.out.println("status " + localLgInst.getBdStatus());
entityManager.persist(localLgInst);
entityManager.flush();
localLgInst是实体的实例。目前我正在将字符串硬编码。系统输出在IDE的控制台中打印字符串,但也是???????。
答案 0 :(得分:0)
尝试将阿拉伯语文本写入NVARCHAR列
答案 1 :(得分:0)
一个可能的错误是代码中某处丢失了unicode。您必须支持从字符串创建到保存数据库中的字符串的Unicode / UTF8。
阿拉伯字符应包含在UTF8字符集中,无需使用UTF16
使用bytes支持UTF8,String对象没有编码。请在此处查看说明:https://stackoverflow.com/a/5729834/891479
对于字符串/字节UTF8处理,您可以查看: https://stackoverflow.com/a/88863/891479
如果您想更深入地了解主题:http://www.oracle.com/us/technologies/java/supplementary-142654.html