"Percepço"のようにアクセント付き文字で関数にURLを入れようとすると、 "Percep%C3%A7%C3%A3o"が出力されます。正しく動作します。しかし、 "Percep%e7%e3o"は、それがすべき方法で動作します。アクセント付き文字に関するUri.EscapeUriString()の問題
String Result = Uri.EscapeUriString("Percepção");
ありがとうございます。
"Percepço"のようにアクセント付き文字で関数にURLを入れようとすると、 "Percep%C3%A7%C3%A3o"が出力されます。正しく動作します。しかし、 "Percep%e7%e3o"は、それがすべき方法で動作します。アクセント付き文字に関するUri.EscapeUriString()の問題
String Result = Uri.EscapeUriString("Percepção");
ありがとうございます。
私はASCIIに元の文字列を符号化することによって、この問題を修正最初のバイト、再びUTF8にそれをコードします。
String Result = Uri.EscapeUriString(Encoding.UTF8.GetString(Encoding.ASCII.GetBytes("Percepção")));
いくつかの詳細については、binarycoderに感謝します。
文字列は、最初にUTF-8としてエンコードされ、バイトはリテラル文字またはパーセントエンコードされたシーケンスに変換されます。
新しいURIスキームは、からなるテキストデータを表すコンポーネントを定義する場合:標準が状態RFC3986、ある
Console.WriteLine(BitConverter.ToString(Encoding.UTF8.GetBytes("Percepção"))); // 50-65-72-63-65-70-C3-A7-C3-A3-6F
:
これはに
EscapeUriString
の結果を比較することによって見ることができますユニバーサルキャラクタセット[UCS]の文字のうち、データは最初にUTF-8文字エンコーディング[STD63]に従ってオクテットとしてエンコードされる必要があります。予約されていないセットの文字に対応していないオクテットだけがパーセントエンコードされている必要があります。
(余談として、Uri.EscapeDataString
はしばしばUri.EscapeUriString
を使用するより適切であることに注意してください。)
Uri.EscapeDataStringを使用しますか?これは、次のような行為は避けてください:http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding。 aspx –
@GordonThompsonその記事では、 'EscapeDataString()'ではなく '* Unescape * DataString()'を使わないと言っています。実際、記事の終わり近くでは、HttpUtility.UrlEncode()の代わりに 'EscapeDataString()'を使うことをお勧めします。 –
if (filterContext.RequestContext.HttpContext.Request.QueryString["params"] != null) {
param = HttpUtility.ParseQueryString(filterContext.RequestContext.HttpContext.Request.QueryString["params"].ToString()).ToString();
}
GOOD SOLUTION !!
私はそれを動作させる最後の方法です。あなたが起動している場合、この機能に
Function UriEncode(ByVal cText As String) As String
Dim cRes As String = ""
For Each iBy As Byte In Encoding.GetEncoding(1252).GetBytes(cText)
Select Case iBy
Case Asc("%")
cRes &= "%25"
Case Asc(" ")
cRes &= "+"
Case Is > 127
cRes &= "%" & Hex(iBy)
Case Else
cRes &= Convert.ToChar(iBy)
End Select
Next
Return cRes
End Function
を使用してください:あなたはこの回答のため
Percep%E7%E3o
'Uri.EscapeUriString()'は '&'や '='や '?'、RFC予約文字をエスケープしないことに注意してください。つまり、クエリパラメータにこれらの文字が含まれていると、URLが破られることになります。だから、 'Uri.EscapeDataString()'が使用する方法です。 –