2011-09-06 37 views
1

我有一個字符串來自ASP頁面,我試圖將URL解碼並將其顯示在ASP.Net頁面中。從ASP到ASP.Net的URLDecoding字符串問題(國際字符)

string str = @"%A0%A01stk.+%D8repynt+%3Cbr%3E%A0%A01stk.+Slipsn%E5l+%3Cbr%3E%3Cp%3E+Total+pris%3A+300";

如果你看一下%D8時通過HttpUtility.UrlDecode運行它應該被翻譯成挪威文字Ø。但事實並非如此。根據我試圖進行的轉換,它會變成不同的東西,但從來沒有Ø%E5應該變成å

下面是一些轉換代碼,我一直在試用:

public static string Convert(string text) 
{ 
    text = HttpUtility.UrlDecode(text); 
    var isoEncoder = System.Text.Encoding.GetEncoding("ISO-8859-1"); 
    var utf8Encoder = new UTF8Encoding(); 

    byte[] txtBytes = isoEncoder.GetBytes(text); 
    byte[] convertedBytes = System.Text.Encoding.Convert(isoEncoder, System.Text.Encoding.UTF8, txtBytes); 

    return utf8Encoder.GetString(convertedBytes); 
} 

根據Wikipedia article on Ø:使用「美國英語 - 國際」鍵盤設置
在Microsoft Windows上,它可以通過鍵入按住Alt-Gr鍵並按下「L」。如果系統使用代碼頁1252作爲系統默認值,則可以在數字鍵盤上按住[Alt]鍵的同時在數字鍵盤上鍵入0216或0248,在任何鍵盤設置下鍵入它。 (代碼頁1252是ISO 8859-1的超集,而216和248是十六進制D8和F8的十進制等價物。)

這似乎表明輸入字符串格式正確(%D8 =Ø) 。

+0

什麼是ASP.NET頁面的[字符集](http://www.joelonsoftware.com/articles/Unicode.html)? – CodeCaster

+0

來自服務器的迴應稱爲「Content-Type:text/html;字符集= UTF-8'。我也忘了提及我無法對web.config進行任何重大更改,因爲它是大量頁面的通用配置文件。 –

回答

1
 string str = @"%A0%A01stk.+%D8repynt+%3Cbr%3E%A0%A01stk.+Slipsn%E5l+%3Cbr%3E%3Cp%3E+Total+pris%3A+300"; 
     string decoded = System.Web.HttpUtility.UrlDecode(str, System.Text.Encoding.GetEncoding("ISO-8859-1"))