C#/ Oracle:指定查询的编码/字符集?

我正在尝试获取Oracle 10数据库的一些数据。
有些细胞含有德国变形金刚(äöü)。
在我的管理工具( TOAD )中,我可以很好地看到它们:“MantelfürDamen”(女士夹克)
这是我的C#代码(简化):

var oracleCommand = new OracleCommand(sqlGetArticles, databaseConnection); var articleResult = oracleCommand.ExecuteReader(); string temp = articleResult.Read()["SomeField"].ToString(); Console.WriteLine(temp); 

输出是:“Mantel f r Damen”
尝试调试(将鼠标移到变量上),Debug-Window,Console-Window,File。

我想我必须在其中指定编码/字符集。 但是哪里?

您还可以在连接字符串中添加Unicode=true

这是我的OracleConnection的一个问题:

 var oracleConnection = new OracleConnection(connectionString); oracleConnection.Open(); return oracleConnection; 

这解决了它:

 oracleConnection.Unicode = true; 

(在打开连接之前)

顺便说一下:我正在使用DevArt的ADO.NET Provider for Oracle

.Net CLR字符串是[内部] UTF-16编码的。 ADO.Net,至少与SQL Server一起,处理数据库中本机字符串格式与.Net CLR中使用的UTF-16编码之间的转换。

我怀疑甲骨文的ADO.Net提供商也是如此。

但是,Console.WriteLine()正在做自己的事情。 您可以通过Console.InputEncoding获取(或设置)输入编码,并通过Console.OutputEncoding获取/设置输出编码。

在我的机器上,Console.WriteLine()正确显示重音字符。 我的机器上的默认输出编码是System.Text.SBCSCodePageEncoding。 它使用的是IBM 437 aka Windows 1252代码页。 它使用默认的光栅字体“终端”。

如果您使用的字体不支持(至少)C0控制和基本拉丁语和C1控制以及Latin-1补充(ISO 8859-1),则您不太可能成功使用重音字符。 IBM 437 / Windows 1252代码页主要是ISO 8859-1,除了代码点0x80到0x9F(C1控制字符)已经分配了字形。