@AlexAns851017
Python dev

Как побороть кодировки c#?

Почему не меняя кодировок я получаю нерабочий массив в этом случае ?
Преобразуя файл через ReadAllBytes все работает. Но если я закодирую это в строку и обратно, все ломается. Не могу понять как это работает, может кто умный подскажет. Пытаюсь экспериментировать с кодировками пока.

byte[] bytesFile = File.ReadAllBytes("filename");
File.WriteAllBytes("working.exe", bytesFile);

string stringFile = Encoding.Default.GetString(bytesFile);
byte[] bytesFile2 = Encoding.Default.GetBytes(stringFile);

File.WriteAllBytes("notworking.exe", bytesFile2);
  • Вопрос задан
  • 176 просмотров
Решения вопроса 1
@SZolotov
Asp.net core, MAUI,WPF,Qt, Avalonia
Потому что в первом случае файл записывается по байтам, а во втором при конвертацци в строку наверняка пропадают непечатные символы, которые удаляются из строки (т.к их увидеть всё равно нельзя) и никак не могут попасть во второй массив, т.е. и содержимое массивов будет разное bytesFile != bytesFile2
Посмотрите содержимое двух файлов через diff утилиты, например, kdiff3. Там и увидите разницу.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
NikFaraday
@NikFaraday
Student full-stack Developer
Ну, скорее всего у вас проблема не с кодировкой, а с тем, что вы пытаетесь записать всё в ЕХЕшник. Вторая проблема в том, что в C# есть другие методы для работы с файлами, который читают и пишут в файл нормально, типа stream.ReadLine()

Если вы используете ReadAllBytes(), тогда, я так понимаю, вы хотите работать с бинарными файлами, а не с обычными текстовыми типа .txt (У вас вообще юзается .exe, так НЕЛЬЗЯ)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
26 апр. 2024, в 10:01
500 руб./за проект
26 апр. 2024, в 09:18
500 руб./в час
26 апр. 2024, в 06:46
1500 руб./в час