.NET无法使用charset“WE8ISO8859P1”从oracle中读取阿拉伯字符

时间:2012-02-14 15:00:24

标签: c# .net oracle10g

我开发了一个基于Web的应用程序,使用C#和ASP.NET从oracle数据库中读取.. 我之前已经部署了它并且它工作得很好..但是这次我使用oracle数据库部署它,其字符集是“WE8ISO8859P1”..并且数据库中存储了阿拉伯语的一些数据..

问题是: .NET读取已损坏的阿拉伯字符(有点像这样:“ÇáÝÑÚÇáÑÆíÓí”),但在使用SQL PLUS时,它通常会读取阿拉伯语;

我搜索过并找到了OTN: Database Character set

任何使其正确读取数据的解决方案?

2 个答案:

答案 0 :(得分:1)

听起来您的数据库配置不正确。

ISO-8859-1 character set不支持阿拉伯数据(我假设您自己只提到了数据库字符集,而是将数据存储在CHARVARCHAR2列中而不是NCHARNVARCHAR2)。您无法在数据库字符集为CHAR的数据库中的VARCHAR2WE8ISO8859P1列中正确存储阿拉伯数据。您需要change the database character set支持阿拉伯数据,以便在CHARVARCHAR2列中正确存储阿拉伯数据。或者,如果您的国家字符集支持阿拉伯语,您可以将数据存储在NCHAR或zNVARCHAR2`列中,但这可能需要更改应用程序以支持这些数据类型。

答案 1 :(得分: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));