.NET可以';t用字符集从神谕中读出阿拉伯字符“;WE8ISO8859P1”;
本文关键字:阿拉伯 字符 WE8ISO8859P1 可以 字符集 NET | 更新日期: 2023-09-27 18:24:39
我使用C#和ASP.NET开发了一个基于web的应用程序,它可以从oracle数据库中读取数据。。我以前部署过它,它运行得很好。。但这次我将它部署在一个oracle数据库中,该数据库的字符集为"WE8ISO8859P1"。。数据库中存储了一些阿拉伯语数据。。
问题是:.NET读取损坏的阿拉伯语字符(有些东西像这样:"ÇáÚÇá;ñÆíí"),但当使用SQL PLUS时,它正常读取阿拉伯语;
我搜索并找到了这个OTN:数据库字符集
有什么解决方案可以让它正确读取数据吗?
听起来您的数据库配置不正确。
ISO-8859-1字符集不支持阿拉伯语数据(我假设,由于您只提到了数据库字符集,所以您将数据存储在CHAR
或VARCHAR2
列中,而不是NCHAR
或NVARCHAR2
列中)。在数据库字符集为WE8ISO8859P1
的数据库中,无法将阿拉伯语数据正确存储在CHAR
或VARCHAR2
列中。您需要将数据库字符集更改为支持阿拉伯语数据的字符集,以便在CHAR
或VARCHAR2
列中正确存储阿拉伯语数据。或者,如果您的国家字符集支持阿拉伯语,您可以将数据存储在NCHAR
或zNVARCHAR2`列中,但这可能需要更改应用程序以支持这些数据类型。
您是否尝试在连接字符串中使用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));