我正在尝试下载名称中包含希伯来字符的文件
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;
}