3

我正在尝试下载名称中包含希伯来语字符的文件

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;
}

4

0 回答 0