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

时间:2011-06-30 13:48:10

标签: c# oracle encoding character-encoding oracle10g

我正在尝试获取Oracle 10数据库的一些数据 有些细胞含有德国变形金刚(äöü) 在我的管理工具(TOAD)中,我可以很好地看到它们:“Mantel f ü r Damen”(女性夹克)
这是我的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。

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

这是我的OracleConnection的一个问题:

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

这解决了它:

oracleConnection.Unicode = true;

(打开连接前)

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

答案 2 :(得分:0)

.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 Control和Basic Latin和C1 Controls以及Latin-1 Supplement(ISO 8859-1),则您不太可能在重音字符上取得成功。 IBM 437 / Windows 1252代码页主要是ISO 8859-1,除了代码点0x80到0x9F(C1控制字符)已经分配了字形。