2013-08-27 71 views
0


Oracle 11g坚持阿拉伯字符

我试图将阿拉伯字符保留到Oracle 11g数据库中。当我坚持使用阿拉伯字符串时,他们成功地坚持了下来,但是,在数据库中他们显示为问号???????。

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

因此,从这个我得出结论,DB认识到阿拉伯语,那里没有问题。我尝试设置客户端/服务器区域语言设置仍然没有解决问题。 在阅读this后,并尝试其建议,我发现这个问题可能与持久层有关,它不能正确处理阿拉伯字符。这有什么解决办法?

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

系统我使用:
服务器:Oracle瘦11克
IDE:IBM WebSphere Integration Developer中使用JSF 1.2
注:还是一个初学者。

EDIT

插入的代码:

 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是一个实体的一个实例。目前我正在将字符串硬编码。 System out在IDE的控制台中打印字符串,但也是???????。

+0

迪您设置编码支持阿拉伯语你的代码中的任何地方在你的java字符串之前要坚持的例子? –

+0

@resus不知道如何在java中设置字符串的编码。在DB NLS_Character集合是WE8MSWIN1252和NLS_NCharacter集合是AL16UTF16 –

+0

@ resus我应该在哪里设置/检查编码? –

回答

0

尝试阿拉伯语文字写nvarchar列

+0

感谢您的回复。所有列都是NVARCHAR –

0

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

阿拉伯字符,应包含在UTF8字符集,没有必要使用UTF-16个

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

+0

好的,这是我测试的.. 我设置了我的字符串: String a =“شنتينشستانتشساي”; 转换为byte []: byte [] b = a.getBytes(“UTF-8”); 然后将字节更改回UTF-8: String c = new String(b,“UTF-8”); 这样我确保字符串使用UTF-8从字节转换而来。 Still ?????在DB .. 还测试了与Windows-1252(给予外国字母),US-ASCII(给出???),Windows-1256(给予外来字母)字符串转换 P.S.这个字符串是一个实体中的属性?我应该改变实体内的东西吗? –

+0

如果您在创建字符串后直接保存在数据库中,这可能不是问题。你能否更新你的问题,并向我们提供你用来将你的字符串保存在数据库中的代码?你用什么客户端来查看该领域的内容?您的客户端Unicode是否兼容?您是否尝试回读该字段以确保它不仅仅是显示问题? –

+0

我编辑了上面的代码。请检查是否有任何我做错了。 –