3

名前にヘブライ文字を含むファイルをダウンロードしようとしています

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

ブラウザでダウンロードしようとすると、ファイル名が正しくエンコードされ、サーバーがファイルを返します。

サーバーから C# コードをダウンロードしている場合、ファイル名が適切にエンコードされていないため、サーバーはエラー 403 を返します。

を使用してファイル名をエンコードHttpUtility.UrlEncode()してクラスに渡すと、WebRequest適切にエンコードされますが、同じ結果になります (エラー 403)。

Fiddler で Web 呼び出しを調べたところ、エンコードされたファイル名が、ブラウザーがエンコードしているファイルとは異なります。ファイル名を取得してデコードすると、ファイル名が異なります(以下を参照)

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