@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);
  • Вопрос задан
  • 195 просмотров
Решения вопроса 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, так НЕЛЬЗЯ)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы