2013-08-27 119 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

我編輯了上面的代碼。請檢查是否有任何我做錯了。 –