C # / Oracle: указать кодировку / набор символов запроса? - PullRequest
2 голосов
/ 30 июня 2011

Я пытаюсь получить некоторые данные из базы данных 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);

Вывод: "Мантель f ? r Damen"
Попробовал отладку (наведение мыши на переменную), Debug-Window, Console-Window, File.

Я думаю, что я должен указать кодировку / набор символов где-то. Но где?

Ответы [ 3 ]

5 голосов
/ 12 июля 2012

Вы также можете добавить Unicode=true в строку подключения

2 голосов
/ 01 июля 2011

Это была проблема с моим OracleConnection:

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

Это исправлено:

oracleConnection.Unicode = true;

(до открытия соединения)Кстати: я использую ADO.NET-провайдер DevArt для Oracle

0 голосов
/ 30 июня 2011

.Net CLR-строки [внутренне] имеют кодировку UTF-16.ADO.Net, по крайней мере с SQL Server, обрабатывает перевод между собственным форматом строки в базе данных и кодировкой UTF-16, используемой в .Net CLR.

Я подозреваю, что это верно для Oracle ADO.NetПоставщик также.

Однако Console.WriteLine () делает свое дело.Вы можете получить (или установить) входную кодировку с помощью Console.InputEncoding и получить / установить выходную кодировку с помощью Console.OutputEncoding.

На моей машине Console.WriteLine () правильно отображает акцентированные символы.Кодировка вывода по умолчанию на моем компьютере - System.Text.SBCSCodePageEncoding.Используется кодовая страница Windows 1252 IBM 437, она же Windows.И он использует растровый шрифт по умолчанию 'Terminal'.

Если используемый вами шрифт не поддерживает (по крайней мере) элементы управления C0, базовую латиницу и C1, а также дополнение Latin-1 (ISO 8859-1)), вы вряд ли добьетесь успеха с акцентированными персонажами.кодовая страница IBM 437 / Windows 1252 в основном соответствует ISO 8859-1, за исключением того, что кодовым точкам от 0x80 до 0x9F (управляющие символы C1) были присвоены глифы.

...