Загрузка файла с символами RTL в имени с помощью C# WebRequest

Я пытаюсь скачать файл с ивритом в имени

https://example.com/path/‏צילום מסך 2014‏.04‏.16 ב‏.16.44.30.png

Когда я пытаюсь загрузить с помощью браузера, имя файла правильно закодировано, и сервер возвращает файл.

Если я загружаю код C# с сервера, имя файла не закодировано должным образом, поэтому сервер возвращает ошибку 403.

Если я закодирую имя файла с помощью HttpUtility.UrlEncode() и передать его WebRequest класс, он закодирован правильно, но имеет тот же результат (ошибка 403).

Я проверял веб-вызовы с помощью Fiddler, и закодированное имя файла отличается от того, что кодирует браузер. Если я получу имя файла и расшифрую его, имя файла будет другим (см. Ниже)

https://example.com/path/צילום מסך 2014.04.16 ב.16.44.30.png

Я подозреваю, что проблема в том, что имя файла частично кодируется символами справа налево, а класс WebRequest не оснащен методами для его обработки. Пожалуйста, смотрите ниже код, используемый для загрузки всех файлов.


private byte[] GetFile(string url)
{
    byte[] result;
    byte[] buffer = new byte[4096];
    WebRequest request = WebRequest.CreateHttp(url);

    using (var remoteStream = request.GetResponse().GetResponseStream())
    {
        using (MemoryStream memoryStream = new MemoryStream())
        {
            int count = 0;

            do
            {
                count = remoteStream.Read(buffer, 0, buffer.Length);
                memoryStream.Write(buffer, 0, count);
            } 
            while (count != 0);

            result = memoryStream.ToArray();
        }
    }

    return result;
}

0 ответов

Другие вопросы по тегам