2012-02-14 132 views
1

我已經開發了一個基於Web的應用程序,使用C#與ASP.NET從Oracle數據庫讀取.. 我已經部署它,它是完美的工作..但是這一次我用一個oracle數據庫部署它,它的字符集是「WE8ISO8859P1」..並且有一些阿拉伯數據庫存儲在數據庫中...NET不能從oracle讀取阿拉伯字符與字符集「WE8ISO8859P1」

問題是: .NET讀取阿拉伯字符被破壞(有些事情是這樣的:「ÇáÝÑÚÇáÑÆÆÓÓ」),但是當使用SQL PLUS時,它通常會讀取阿拉伯語;

我搜索,發現這個OTN: Database Character set

任何解決方案,使其正確讀取數據?

+0

看看下面的鏈接http://stackoverflow.com/questions/9278600/datagridview-persian-formatting#comment11697656_9278600也是谷歌這個System.Globalization.CultureInfo,做一個谷歌搜索UTF-8編碼使用C#和Oracle – MethodMan 2012-02-14 15:07:33

+0

非常感謝,但沒有解決方案 – 2012-02-14 15:53:23

回答

1

這聽起來像你的數據庫配置不正確。

ISO-8859-1 character set不支持阿拉伯語數據(我假設,因爲你只提到數據庫字符集,你將數據存儲在CHARVARCHAR2列,而不是NCHARNVARCHAR2)。在數據庫字符集爲WE8ISO8859P1的數據庫中,無法正確地將阿拉伯數據存儲在CHARVARCHAR2列中。您需要change the database character set才能支持阿拉伯數據,以便在CHARVARCHAR2列中正確存儲阿拉伯文數據。或者,如果您的國家字符集支持阿拉伯語,您可以將數據存儲在NCHAR或zNVARCHAR2`列中,但這可能需要應用程序更改以支持這些數據類型。

+0

在數據庫中的列數據類型是NVARCHAR .. 和是..數據庫配置不正確,但它不是我的數據庫,所以我不能改變它。 。我的厄運:( – 2012-02-14 15:35:55

+0

@ Ibn-Tashfin - 然後你的應用程序無法正常工作,就像你的應用程序可能無法工作,如果有人決定將它安裝在Oracle 7數據庫中,你的應用程序有一個依賴關係,數據庫能夠支持將「阿拉伯數據」存儲在「CHAR」和「VARCHAR2」列中。您可以配置數據庫以允許該數據庫,也可以修改應用程序以支持「NCHAR」和「NVARCHAR2」數據類型。 – 2012-02-14 15:41:01

+0

@Justin ..你是什麼意思這個:「你可以配置數據庫,以允許」我沒有得到它? 是否可以修改數據庫來解決問題? – 2012-02-14 15:49:57

0

您是否嘗試過在連接字符串中使用Unicode=true?看到這一點:http://msdn.microsoft.com/en-us/library/2d7h4ycx(v=vs.80).aspx

如果還是不行,請嘗試使用OracleDataReader.GetBytes讀它作爲二進制,然後用代碼頁1256(阿拉伯語)編碼。喜歡的東西:

var buffer = new byte[4096]; 
int bytesRead = oracleReader.GetBytes(columnIndex, 0, buffer, 0, buffer.Length); 
String value = new String(new System.Text.Encoding(1256).GetChars(buffer, 0, bytesRead)); 
+0

以二進制讀取數據,然後將其解釋爲來自不同的字符集似乎可行,但這是一個非常糟糕的體系結構方法。您將使數據無法讀取到除您之外的任何應用程序。如果有人導出數據並將其導入另一個數據庫,那麼您的應用程序可能無法再讀取它,這很可能使得將來某些常規數據庫維護會導致嚴重的頭痛。 – 2012-02-14 15:44:48