Загрузка файла с символами 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;
}