【问题标题】:C#/Oracle: Specify Encoding/Character Set of Query?C#/Oracle:指定查询的编码/字符集?
【发布时间】:2011-09-26 00:27:30
【问题描述】:

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

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

【问题讨论】:

    标签: c# oracle encoding character-encoding oracle10g


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这是我的 OracleConnection 的问题:

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

      这解决了它:

      oracleConnection.Unicode = true;
      

      (打开连接之前)

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

      【讨论】:

        【解决方案3】:

        .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 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 控制字符)已分配字形。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-10
          • 1970-01-01
          • 2017-11-01
          • 2010-12-01
          • 2018-02-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-25
          相关资源
          最近更新 更多