2012-02-14 133 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