4

UTF-8でUrlEncodedされている英語以外の文字を含むfile://リンクがあります。これらのリンクをブラウザで機能させるには、それらを再エンコードする必要があります。

file://development/H%C3%A5ndplukket.doc

になります

file://development/H%e5ndplukket.doc

私は動作する次のコードを持っています:

public string ReEncodeUrl(string url)
{
    Encoding enc = Encoding.GetEncoding("iso-8859-1");
    string[] parts = url.Split('/');
    for (int i = 1; i < parts.Length; i++)
    {
        parts[i] = HttpUtility.UrlDecode(parts[i]); // Decode to string
        parts[i] = HttpUtility.UrlEncode(parts[i], enc); // Re-encode to latin1
        parts[i] = parts[i].Replace('+', ' '); // Change + to [space]
    }
    return string.Join("/", parts);
}

これを行うためのよりクリーンな方法はありますか?

4

3 に答える 3

1

それは実際にはかなりきれいだと思います。それは読みやすく、あなたはそれが正しく機能すると言いました。実装が消費者から隠されている限り、私はその最後の改善を絞り出すことを心配しません.

この操作を過度に実行している場合 (イベントごとに数百回の実行など)、UrlEncode/UrlDecode から実装を取り出し、それらを相互にストリーミングして、文字列の分割/結合の必要性を排除することでパフォーマンスを向上させることを検討しますが、とにかくテストはそれを証明する必要があり、間違いなく「クリーン」ではありません:-)

于 2010-01-06T02:29:41.000 に答える
0

違いを生む実際の変更方法はわかりませんが、UrlEncode の前に + をスペースに置き換えて、%20 に変換するべきではありませんか?

于 2009-12-18T10:01:52.617 に答える
0

確かに醜く、実際には改善されていませんが、全体を再エンコードすることができます(分割/反復/結合を回避).Replace( "%2f"、 " /")

最終結果にスペースを保持したいコードがわかりません - まだスペースが含まれている場合、実際にエンコードされたものになっていないようですか?

于 2009-12-29T09:44:34.310 に答える