0


我正在尝试将阿拉伯字符保存到 Oracle 11g 数据库中。当我持久化阿拉伯字符串时,它们会成功持久化,但是在数据库中它们显示为问号???????。

我搜索并发现问题可能与数据库编码有关,但我认为这可能不是真的,因为我能够从 SQLDeveloper 编写阿拉伯语字符串并提交 DB,它在 DB 表中正确显示。此外,当我检索该字段并将其显示在屏幕上时,它会正确显示。

因此,由此我得出结论,DB 可以识别阿拉伯语并且那里没有问题。我尝试设置客户端/服务器区域语言设置仍然没有解决问题。在阅读了这篇文章并尝试了它的建议后,我发现问题可能出在持久层上,它不能正确处理阿拉伯字符。解决方案是什么?

我不确定这是否是一个多余的问题,但我很绝望。任何帮助/建议表示赞赏。

我正在使用的系统:
服务器: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 的控制台中打印字符串,但也 ???????。

4

2 回答 2

0

一个可能的错误是 unicode 在您的代码中的某处丢失。从字符串创建到将字符串保存在数据库中,您必须支持 Unicode/UTF8。

阿拉伯字符应包含在 UTF8 字符集中,无需使用 UTF16

使用字节支持 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

于 2013-08-27T10:05:33.140 回答
0

尝试将阿拉伯文本写入 NVARCHAR 列

于 2013-08-27T09:25:31.073 回答