2011-02-03 16 views
5

私は.NETを使用していますが、URLをエンコードした後は設定された長さを超えないようにマルチバイト文字を含む文字列を切り捨てる必要があります。これは組み込むもののようですが、私はそれを見つけることができません。URLでエンコードされた文字列の長さを.NET内のマルチバイト文字で制限する

URLエンコードされた部分文字列を処理しますが、エンコードされた文字の一部を取り除く可能性があります(スペースは%20になり、最後にあった場合は%2に切り捨てられる可能性があります)、またはマルチバイト文字の一部が切り捨てられる(πは%CF%80としてエンコードされ、%、%CF、%CF%8として切り捨てられる可能性があります)。

+0

指定した長さで文字列を切り捨てる方法を尋ねていますか、それとも自動的に行うかを尋ねていますか?答えは最初の質問はlongString.Substring(0、maxLength)です。 – Kendrick

+0

@ケンドリック:元の文字(別名マルチバイト文字)の中には、それ以上の文字列を必要とするため、実際にあなたがそれをurlencodeするまで、文字列がurlencode形式でどれくらい長くなるかは、実際には分かりません。 urlencodeバージョンの1バイト。 – MusiGenesis

+0

@MusiGenesis:それは正しいです。より具体的に質問を更新しました。 – thefroatgt

答えて

1

私のクイックグーグル検索では、これは何も起こっていませんでしたが、これは比較的一般的な問題(少なくとも怪しい長いURLを避けていない人にとっては少なくとも)のように思えます。

文字列をエンコードする場所を繰り返し指定することができます。エンコードされた文字列が長すぎる場合は、元の文字を切り取って再エンコードし、エンコードされた文字列が十分に短いまで続けます。これは明らかにあまり効果がありません。

+0

しかし、バイナリ検索のようなことができます。 'Encoding.GetByteCount()'を呼び出します。それが長すぎる場合は、文字列の長さとの差の半分を減算して、もう一度試してください。それが適合すれば、差の半分を加えてください。それはおそらく非常に頻繁に行われることはないと考えれば、文字単位で行うのはおそらく「十分に速い」でしょう。 –

関連する問題