Я пытаюсь загрузить данные, сгенерированные пользователями на сайте asp.net, в мэйнфрейм Unisys. Мой клиент решил, что они хотят, чтобы я загружал данные непосредственно в Unisys Mainframe, вместо использования FTP для загрузки файла. FTP обычно выполняет преобразование между ASCII и EBCDIC.C# Не удается создать файл EBCDIC на Unisys Mainframe Windows Share
Проблема в том, что мэйнфрейм видит файл как ASCII независимо от того, кодировал ли я содержимое файла как EBCDIC.
Тест код здесь:
string dataToWrite = "ACHR0000000000575TEST EBCDICPAYEE 8899007500038159 0000001000160330 ".ToUpper();
Encoding ebcdic = Encoding.GetEncoding("IBM037");
List<byte> bytes = new List<byte>();
bytes.AddRange(Encoding.Convert(Encoding.ASCII, ebcdic, Encoding.ASCII.GetBytes(dataToWrite)));
using (var unc = new UNCAccessWithCredentials())
{
// get access to the reconciliation file share using credentials in the config
string path = @"\\xxx\RECONDEV";
unc.NetUseWithCredentials(path, "XXX","", "XXX");
string fileName = Path.Combine(path, "ACH");
using (var binWriter = new BinaryWriter(File.OpenWrite(fileName)))
{
binWriter.Write(bytes.ToArray());
binWriter.Flush();
binWriter.Close();
}
}
Вопросы
1) Должен ли я создать файл в формате ASCII, а затем задание мэйнфреймов вызвать утилиту для преобразования файлов EBCDIC? Если да, то каково имя утилиты? Операции мэйнфреймов не знают об одном.
2) Есть ли способ создать файл EBCDIC внутри .net? Кодирование EBCDIC работает, но я считаю, что типы файлов разные, и я ничего не смог узнать.
Я буквально ничего не делал с мэйнфреймом за 2 десятилетия, поэтому я вышел из своей глубины.
Заранее спасибо. Chris
В строке bytes.AddRange (Encoding.Convert (Encoding.ASCII, ebcdic, ... как вы указываете ebcdic, поскольку это не признанное значение enum для System.Text.Encoding? – auburg
Кодирование ebcdic = Encoding.GetEncoding ("IBM037") – CaffeineDrivenDevelopment
Не знаю, может ли эта ссылка http://www.yoda.arachsys.com/csharp/ebcdic/ вам помочь? – auburg