кодировать и декодировать странные данные .shm файла в и из base64 c # - PullRequest
1 голос
/ 13 марта 2019

сначала удручающий факт: https://www.base64decode.org/ может делать то, что я хочу.

Я пытаюсь закодировать и декодировать (в и из base64) сгенерированный файл модели (.shm)с помощью инструмента обработки изображений MVTec Halcon, потому что я хочу сохранить его в XML-файле.

Если я открою его, он будет иметь странную форму:

HSTF ÿÿÿÿ¿€          Q¿ÙG®záH?Üä4©±w?­Eè}‰@?ð ................

Я использую эти методыкодировать и декодировать его:

    public static string Base64Encode(string text)
    {
        Byte[] textBytes = Encoding.Default.GetBytes(text);
        return Convert.ToBase64String(textBytes);
    }

    public static string Base64Decode(string base64EncodedData)
    {
        Byte[] base64EncodedBytes = Convert.FromBase64String(base64EncodedData);
        return Encoding.Default.GetString(base64EncodedBytes);
    }

и вызывать методы из графического интерфейса следующим образом:

    var model = File.ReadAllText(@"C:\Users\\Desktop\model_region_nut.txt");
    var base64 = ImageConverter.Base64Encode(model);
    File.WriteAllText(@"C:\Users\\Desktop\base64.txt", base64);

    var modelneu = ImageConverter.Base64Decode(File.ReadAllText(@"C:\Users\\Desktop\base64.txt"));
    File.WriteAllText(@"C:\Users\\Desktop\modelneu.txt", modelneu);

мой результат для modelneu:

HSTF ??????          Q??G?z?H???4??w??E?}??@??

, поэтомуВы можете видеть, что есть много пропущенных символов .. Я думаю, что проблема вызвана использованием .Default.

Спасибо за вашу помощь, Мишель

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

Если вы работаете с двоичными данными, нет никакой причины проходить через декодирование и кодирование текста. Это может привести к повреждению данных различными способами, даже если вы используете согласованную кодировку символов.

Просто используйте File.ReadAllBytes() вместо File.ReadAllText() и пропустите ненужный шаг Encoding.

0 голосов
/ 13 марта 2019

Проблема с чтением файла с неопределенным encoding, проверьте этот вопрос .

Как уже упоминалось, вы можете пойти с перегрузкой для ReadAllText , чтобы указать кодировкуа также для записи необходимо указать кодировку для WriteAllText Я предлагаю использовать кодировку UTF-8 так:

var model = File.ReadAllText(@"C:\Users\pichlerm\Desktop\model_region_nut.txt",Encoding.UTF8);
var base64 = ImageConverter.Base64Encode(model);
File.WriteAllText(@"C:\Users\\Desktop\base64.txt", base64,Encoding.UTF8);

var modelneu = ImageConverter.Base64Decode(File.ReadAllText(@"C:\Users\\Desktop\base64.txt"));
File.WriteAllText(@"C:\Users\pichlerm\Desktop\modelneu.txt", modelneu);
...