我正在使用HttpUtility.UrlDecode(string)
。但是,當我嘗試解碼字符串"%ab"
時,它會返回「 」字符,從而產生問題。HttpUitlity.UrlDecode(string)是如何工作的?
0
A
回答
1
如果你看看這個link你可以看到你可以發送編碼作爲參數的功能。我會玩這個,很可能,你從函數獲得的字符串編碼不是UTF-8。
1
https://msdn.microsoft.com/en-us/library/adwtk1fy(v=vs.110).aspx
已被編碼用於傳輸在URL爲解碼字符串轉換爲字符串。
URL編碼參考:http://www.w3schools.com/tags/ref_urlencode.asp
其最有可能你試圖解碼和UTF8 URL「%AB%犯規參考任何東西 - 這就是爲什麼你得到了‘’字符數限制。它不知道用什麼字符來解碼。
如果您嘗試這樣的事情解碼:「此%圖20是%20A%20text」則回覆:「這是一個文本」,因爲20%=「space'字符
0
您可以找到執行的方法on the reference source page,它實質上對指定的URL執行每個字符的驗證,並根據需要對其進行轉換。
您現在面臨的問題很可能與輸出字符串的編碼有關。由UrlDecode
返回的字符可能會返回一個字符,該字符不會被顯示字符串的編碼支持,從而導致「怪異」字符。
爲了完整起見,這裏是整個方法:
internal string UrlDecode(string value, Encoding encoding) {
if (value == null) {
return null;
}
int count = value.Length;
UrlDecoder helper = new UrlDecoder(count, encoding);
// go through the string's chars collapsing %XX and %uXXXX and
// appending each char as char, with exception of %XX constructs
// that are appended as bytes
for (int pos = 0; pos < count; pos++) {
char ch = value[pos];
if (ch == '+') {
ch = ' ';
}
else if (ch == '%' && pos < count - 2) {
if (value[pos + 1] == 'u' && pos < count - 5) {
int h1 = HttpEncoderUtility.HexToInt(value[pos + 2]);
int h2 = HttpEncoderUtility.HexToInt(value[pos + 3]);
int h3 = HttpEncoderUtility.HexToInt(value[pos + 4]);
int h4 = HttpEncoderUtility.HexToInt(value[pos + 5]);
if (h1 >= 0 && h2 >= 0 && h3 >= 0 && h4 >= 0) { // valid 4 hex chars
ch = (char)((h1 << 12) | (h2 << 8) | (h3 << 4) | h4);
pos += 5;
// only add as char
helper.AddChar(ch);
continue;
}
}
else {
int h1 = HttpEncoderUtility.HexToInt(value[pos + 1]);
int h2 = HttpEncoderUtility.HexToInt(value[pos + 2]);
if (h1 >= 0 && h2 >= 0) { // valid 2 hex chars
byte b = (byte)((h1 << 4) | h2);
pos += 2;
// don't add as char
helper.AddByte(b);
continue;
}
}
}
if ((ch & 0xFF80) == 0)
helper.AddByte((byte)ch); // 7 bit have to go as bytes because of Unicode
else
helper.AddChar(ch);
}
return Utf16StringValidator.ValidateString(helper.GetString());
}
相關問題
- 1. string(enum.member)是如何工作的?
- 2. java.awt.Color.getColor(String colorName)是如何工作的?
- 3. Applescript`string id`如何工作?
- 4. String Literal Pool如何工作
- 5. std :: string length()函數是如何工作的?
- 6. 語法MODULE :: METHODNAME('string')是如何工作的
- 7. 「string :: erase」如何在cpp中工作?
- 8. Java String和StringBuffer如何工作
- 9. IDataErrorInfo.this [string propertyName]如何在C#中工作?
- 10. AsyncTask <String,Void,Void>如何工作?
- 11. std :: string ==不工作?
- 12. String []和String ...(Var-args)在內部工作時是否相同?
- 13. .Replace(String,String)VB函數不工作
- 14. 工作目錄是如何工作的?
- 15. AngularJS是如何工作的?
- 16. ConstantTimeByteEq是如何工作的?
- 17. $(this.hash)是如何工作的?
- 18. 這是如何工作的?
- 19. ClientIDMode是如何工作的?
- 20. 這是如何工作的?
- 21. NSCountedSet是如何工作的?
- 22. 這是如何工作的?
- 23. EngineYard是如何工作的
- 24. OpenID是如何工作的?
- 25. Html.fromHtml是如何工作的?
- 26. weak_ptr是如何工作的?
- 27. CGContextTransalateCTM是如何工作的?
- 28. Boost.Python是如何工作的?
- 29. NSCondition是如何工作的?
- 30. loop.parent是如何工作的?
你有什麼期望的輸出? – usr
爲什麼這是一個問題? '%ab'是'(char)171',它是「1/2」符號(根據http://www.asciitable.com/)。如果你得到「未知字符」的符號,那麼你使用的字體(字體)沒有那個符號......或者你的頁面編碼不正確。 – Dai