C# .NET可以';t用字符集“读取oracle中的阿拉伯字符”;WE8ISO8859P1“;

C# .NET可以';t用字符集“读取oracle中的阿拉伯字符”;WE8ISO8859P1“;,c#,.net,oracle10g,C#,.net,Oracle10g,我使用C#with ASP.NET开发了一个基于web的应用程序,它可以读取oracle数据库。。 我以前部署过,它工作得很好。。但这一次我将它与一个oracle数据库一起部署,它的字符集是“WE8ISO8859P1”。。数据库中存储了一些阿拉伯文数据 问题是: NET读取的阿拉伯文字符已损坏(例如:“ÝÝÚÝÚÝÝÝÝí”),但使用SQL PLUS时,它正常读取阿拉伯文 我已经找过了,找到了这个 是否有任何解决方案使其正确读取数据?听起来您的数据库配置不正确 不支持阿拉伯文数据(我假设由于您只

我使用C#with ASP.NET开发了一个基于web的应用程序,它可以读取oracle数据库。。 我以前部署过,它工作得很好。。但这一次我将它与一个oracle数据库一起部署,它的字符集是“WE8ISO8859P1”。。数据库中存储了一些阿拉伯文数据

问题是: NET读取的阿拉伯文字符已损坏(例如:“ÝÝÚÝÚÝÝÝÝí”),但使用SQL PLUS时,它正常读取阿拉伯文

我已经找过了,找到了这个


是否有任何解决方案使其正确读取数据?

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


不支持阿拉伯文数据(我假设由于您只提到了数据库字符集,所以您将数据存储在
CHAR
VARCHAR2
列中,而不是
NCHAR
NVARCHAR2
)。在数据库字符集为
WE8ISO8859P1
的数据库中,无法在
CHAR
VARCHAR2
列中正确存储阿拉伯语数据。为了将阿拉伯语数据正确地存储在
CHAR
VARCHAR2
列中,您需要使用支持阿拉伯语数据的工具。或者,如果您的国家字符集支持阿拉伯语,您可以将数据存储在
NCHAR
或zNVARCHAR2`列中,但这可能需要更改应用程序以支持这些数据类型。

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


不支持阿拉伯文数据(我假设由于您只提到了数据库字符集,所以您将数据存储在
CHAR
VARCHAR2
列中,而不是
NCHAR
NVARCHAR2
)。在数据库字符集为
WE8ISO8859P1
的数据库中,无法在
CHAR
VARCHAR2
列中正确存储阿拉伯语数据。为了将阿拉伯语数据正确地存储在
CHAR
VARCHAR2
列中,您需要使用支持阿拉伯语数据的工具。或者,如果您的国家字符集支持阿拉伯语,您可以将数据存储在
NCHAR
或zNVARCHAR2`列中,但这可能需要更改应用程序以支持这些数据类型。

您是否尝试在连接字符串中使用
Unicode=true
?见此:

如果不起作用,请尝试使用
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));

您是否尝试过在连接字符串中使用
Unicode=true
?见此:

如果不起作用,请尝试使用
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));

查看下面的链接,也可以搜索这个系统.Globalization.CultureInfo并使用C#和OracleWell搜索UTF-8编码谢谢,但没有解决方案。查看下面的链接,也可以搜索这个系统.Globalization.CultureInfo并使用C#和OracleWell搜索UTF-8编码谢谢,但在数据库中没有解决方案列数据类型为NVARCHAR。。是的。。数据库配置不正确,但它不是我的数据库,因此我无法更改它。。我的坏运气:(@Ibn Tashfin-那么您的应用程序无法正常工作。就像有人决定将其安装到Oracle 7数据库中时,您的应用程序可能无法正常工作一样,您的应用程序有一个依赖项,即数据库能够在
CHAR
VARCHAR2
列中正确存储阿拉伯语数据。您可以配置dat请允许这样做,或者您可以修改您的应用程序以支持
NCHAR
NVARCHAR
数据类型。@Justin.您这样说是什么意思:“您可以将数据库配置为允许这样做”我不明白?你是说修改数据库可以解决问题吗?@Ibn Tashfin-是的,你可以更改现有数据库的字符集。在我的回答中,我链接到了10.2全球化支持指南中关于如何更改现有数据库的字符集的章节。@Justin..我想投票支持你的答案,但是我需要15分:)…谢谢..我将阅读您提供的链接并发回此处。在数据库中,列数据类型为NVARCHAR..是..数据库配置不正确,但它不是我的数据库,因此我无法更改..我的运气不好:(@Ibn Tashfin-那么您的应用程序无法正常工作。就像有人决定将其安装到Oracle 7数据库中时,您的应用程序可能无法正常工作一样,您的应用程序有一个依赖项,即数据库能够在
CHAR
VARCHAR2
列中正确存储阿拉伯语数据。您可以配置dat请允许这样做,或者您可以修改您的应用程序以支持
NCHAR
NVARCHAR
数据类型。@Justin.您这样说是什么意思:“您可以将数据库配置为允许这样做”我不明白?你是说修改数据库可以解决问题吗?@Ibn Tashfin-是的,你可以更改现有数据库的字符集。在我的回答中,我链接到了10.2全球化支持指南中关于如何更改现有数据库的字符集的章节。@Justin..我想投票支持你的答案,但是我需要15分:)…谢谢..我将阅读您提供的链接并发回此处。读取二进制数据,然后将其解释为来自不同的字符集可能会起作用,但这是一种非常糟糕的体系结构方法。您会使数据对除您之外的任何应用程序都不可读。您很可能会使某些常规数据库将来的e维护将引起很大的麻烦——如果有人导出数据并将其导入另一个数据库,您的应用程序可能无法再读取它了