2017-09-06 27 views
0

我使用.NET Core 2与几周前在这里发布的System.Data.OracleClient包:https://www.nuget.org/packages/System.Data.OracleClient/.NET Core 2 + System.Data.OracleClient。中文字符不起作用

我可以读取数字,日期和普通英文字符。但不是中国人。可能还有很多其他非西方人物。

下面是一个示例程序来说明错误:

using System; 
using System.Text; 
using System.Diagnostics; 
using System.IO; 
using System.Data.OracleClient; 

namespace OracleConnector 
{ 
    class Program 
    {   
     static void Main() 
     { 
      TestString(); 

      return; 
     } 

     private static void TestString() 
     { 
      string connStr = "Data Source = XE; User ID = testuser; Password = secret"; 

      using (OracleConnection conn = new OracleConnection(connStr)) 
      { 
       conn.Open(); 
       var cmd = conn.CreateCommand(); 
       cmd.CommandText = "select 'some text in English language' as a, '储物组合带门/抽屉, 白色 卡维肯, 因维肯 白蜡木贴面' as b from dual"; 

       var reader = cmd.ExecuteReader(); 

       reader.Read(); 
       string sEnglish = reader.GetString(0); 
       string sChinese = reader.GetString(1); 

       Trace.WriteLine("English from db: " + sEnglish); 
       Trace.WriteLine("Chinese from db: " + sChinese); 
       Trace.WriteLine("Chinese from the code: 储物组合带门/抽屉, 白色 卡维肯, 因维肯 白蜡木贴面"); 
      } 
     }   
    } 
} 

它输出这样的:

English from db: some text in English languageဂ 
Chinese from db: ¿¿¿¿¿¿/¿¿, ¿¿ ¿¿¿, ¿¿¿ ¿¿¿¿¿e 
Chinese from the code: 储物组合带门/抽屉, 白色 卡维肯, 因维肯 白蜡木贴面 

正如你所看到的,从正常码字符中国工作。但不是来自数据库。此外,英文文本中的最后一个字符是一些混乱的东西。我也尝试过相应的Mono nuget包,结果相同。

任何人都有任何线索如何解决这个问题?

编辑:尝试将Unicode = True添加到连接字符串,但中文字符仍然不起作用。

回答

2

这是System.Data.OracleClient DLL的问题。我遇到同样的问题,即2,3或甚至4个字节的Unicode字符被粘贴到我的字符串末尾。

切换到Mono.Data.OracleClientCore略有帮助,但我仍然在一些字符串(Unicode退格和反斜杠)的末尾出现了一些奇怪的字符。

我只是尝试了以下库,它似乎对我的工作需要(到目前为止): https://github.com/ericmend/oracleClientCore-2.0

您将需要重新编译为Windows(在OciCalls.cs变化#define OCI_WINDOWS)。如果我发现它不能继续工作,将更新此答案。

不过,我认为我们将不得不等待Oracle发布他们的.NET Core支持的解决方案,以用于任何生产就绪库。