Кодировка base64 в C # UTF-8 неправильно декодируется в PHP - PullRequest
0 голосов
/ 30 сентября 2018

, поэтому у меня следующая проблема: я кодирую содержимое файла в C # с UTF-8 в base64, затем URL-кодирую его и отправляю запрос GET на мой php, затем я url декодирую его, а затем декодирую base64Это.Результат не 1: 1 для файла, который я закодировал в C #, несмотря ни на что.Я перепробовал все кодировки в C #, ни одна из них не работает.Я должен сделать что-то еще здесь?Я также хотел бы упомянуть, что я возвращаю файл обратно в поток октетов, возможно, echo не может "эхо" символов UTF-8?

Вот моя кодировка Base64 в C #:

    public static string Base64Encode(string plainText)
    {
         var plainTextBytes = Encoding.UTF8.GetBytes(plainText);
         string base64 = System.Convert.ToBase64String(plainTextBytes);
         return WebUtility.UrlEncode(base64);
    }

Вот как я декодирую его в PHP:

base64_decode(urldecode($_GET["parameter"]));

И вот как я его скачиваю:

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="<filename>"');
echo(base64_decode(urldecode($_GET["parameter"])));

Спасибо.

1 Ответ

0 голосов
/ 30 сентября 2018

Вместо того, чтобы читать файл как строку, а затем преобразовывать его обратно в двоичный файл, чтобы преобразовать его в строку base64, вы можете просто прочитать файл в байтах:

var fileBytes = File.ReadAllBytes(fileName);

И затем преобразоватьэто к base64:

var fileBytes = File.ReadAllBytes(fileName);
var base64 = Convert.ToBase64String(fileBytes);
...