2011-06-30 11 views
2

Oracle 10データベースの一部のデータを取得しようとしています。
一部のセルにはドイツ語のウムラウト(ööü)が含まれています。
私の管理ツール(TOAD)で、私は非常によく、それらを見ることができます(女性用ジャケット)
"üRダーメンFマンテルは、" これは私の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"
デバッグ(マウスを変数に移動)、デバッグウィンドウ、コンソールウィンドウ、ファイルで試しました。

私はエンコード/文字セットを指定する必要があると思います。しかしここで?

答えて

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でエンコードされています。少なくともSQL ServerのADO.Netは、データベースのネイティブ文字列形式と.Net CLRで使用されるUTF-16エンコーディングとの間の変換を処理します。

私は、それがオラクルのADO.Netプロバイダにも当てはまると考えています。

しかし、Console.WriteLine()は独自のことをしています。 Console.InputEncodingで入力エンコーディングを取得(または設定)し、Console.OutputEncodingで出力エンコーディングを取得/設定できます。

私のマシンでは、Console.WriteLine()はアクセント付きの文字を正しく表示します。私のマシンでのデフォルトの出力エンコーディングは、System.Text.SBCSCodePageEncodingです。これは、IBM 437 aka Windows 1252コード・ページを使用しています。そしてそれはデフォルトのラスターフォント「ターミナル」を使用しています。

使用しているフォントが(少なくとも)C0コントロールとベーシックラテンとC1コントロールとLatin-1補足(ISO 8859-1)をサポートしていない場合、アクセント付きの文字ではうまくいかないでしょう。 IBM 437/Windows 1252コードページはほとんどがISO 8859-1ですが、コードポイント0x80〜0x9F(C1制御文字)にはグリフが割り当てられています。

5

Unicode=trueを追加することもできますr接続文字列

関連する問題