2011-06-30 37 views
2

我試圖獲取Oracle 10數據庫的一些數據。
某些電池含有德國元素變音(äöü)。
在我的管理工具(TOAD)我可以看到他們非常好: 「曼特爾˚Fü [R達曼」(夾克女)
這是我的C#代碼(簡化):C#/ Oracle:指定查詢的編碼/字符集?

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

的輸出爲:「Mantel f r Damen」
嘗試調試(將鼠標移動到變量上),調試窗口,控制檯窗口,文件。

我想我必須指定編碼/字符集somwhere。但是哪裏?

回答

2

這是我的OracleConnection一個問題:

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

這個固定:

oracleConnection.Unicode = true; 



順便提一下(打開連接前):我使用的是DevArt's ADO.NET Provider for Oracle

0

.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代碼頁。它使用默認的光柵字體'Terminal'。

如果您正在使用的字體不支持(至少)C0控制和基本拉丁語和C1控件和Latin-1補充(ISO 8859-1),則您不太可能成功使用帶重音符號的字符。 IBM 437/Windows 1252代碼頁大部分爲ISO 8859-1,但代碼點0x80至0x9F(C1控制字符)已分配字形。

5

您還可以在您的身上添加Unicode=true r連接字符串