C# — декодирование данных из AS/400 iSeries

Я использую стандартный .NET OdbcConnection для подключения к базе данных AS/400 iSeries. Я могу запросить эту базу данных. К сожалению, некоторые поля кажутся закодированными. Как мне декодировать эти значения в С#? Я пробовал следующее:

string text = string.Empty;
if (bytes.Length > 0)
{
    ASCIIEncoding encoder = new ASCIIEncoding();
    text = encoder.GetString(bytes);
}
return text;

Переменная bytes представляет данные, которые необходимо декодировать. К сожалению, мне не везет. Мне сказали, что данные будут возвращаться правильно, если я настрою источник данных ODBC на своем компьютере с Windows и отмечу флажок «Преобразовать двоичные данные (CCSID65535) в текст» на вкладке перевода. Однако я хочу использовать чистый С#. Любые идеи? Я далеко?

Спасибо!


person user70192    schedule 06.04.2009    source источник
comment
В чем именно неверны данные? Вы пробовали другие кодировки? Есть образец кода?   -  person Adam Robinson    schedule 06.04.2009


Ответы (1)


Скорее всего, он использует EBCDIC. Вы можете попробовать использовать Encoding.GetEncoding(37) или использовать кодировку EBCDIC, которую я написал некоторое время назад.

person Jon Skeet    schedule 06.04.2009
comment
Опереди меня, Джон. EBCDIC тоже был моей первой мыслью. - person Kevin; 06.04.2009
comment
Ты мужчина. Это избавило меня от головной боли. Спасибо большое за вашу помощь! - person user70192; 06.04.2009
comment
Рекомендую использовать одно из имен (IBM037 или подобное, см. msdn.com/System.Text.Encoding для полного списка), так как это позволяет избежать магического числа. - person Richard; 06.04.2009
comment
@Richard: он превращает магическое число в магическую строку :) Было бы неплохо, если бы они были доступны через API кодирования ... - person Jon Skeet; 06.04.2009
comment
@Jon: Like Encoding.GetEncodings Возвращает массив, содержащий все кодировки? - person Richard; 06.04.2009