我开发了一个基于Web的应用程序,使用C#和ASP.NET从oracle数据库中读取.. 我之前已经部署了它并且它工作得很好..但是这次我使用oracle数据库部署它,其字符集是“WE8ISO8859P1”..并且数据库中存储了阿拉伯语的一些数据..
问题是: .NET读取已损坏的阿拉伯字符(有点像这样:“ÇáÝÑÚÇáÑÆíÓí”),但在使用SQL PLUS时,它通常会读取阿拉伯语;
我搜索过并找到了OTN: Database Character set
任何使其正确读取数据的解决方案?
答案 0 :(得分:1)
听起来您的数据库配置不正确。
ISO-8859-1 character set不支持阿拉伯数据(我假设您自己只提到了数据库字符集,而是将数据存储在CHAR
或VARCHAR2
列中而不是NCHAR
或NVARCHAR2
)。您无法在数据库字符集为CHAR
的数据库中的VARCHAR2
或WE8ISO8859P1
列中正确存储阿拉伯数据。您需要change the database character set支持阿拉伯数据,以便在CHAR
或VARCHAR2
列中正确存储阿拉伯数据。或者,如果您的国家字符集支持阿拉伯语,您可以将数据存储在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));