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

本文关键字:编码 字符集 查询 Oracle | 更新日期: 2023-09-27 18:00:51

我正在尝试获取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 fr Damen">
尝试调试(将鼠标移到变量上(、调试窗口、控制台窗口、文件。

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

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

您还可以在连接字符串

中添加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编码之间的转换。

我怀疑Oracle的ADO.Net提供商也是如此。

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

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

如果你使用的字体不支持(至少(C0控制和基本拉丁语以及C1控制和拉丁语-1补充(ISO 8859-1(,那么你不太可能在重音字符方面取得成功。IBM 437/Windows 1252代码页主要是ISO 8859-1。