从ASP到ASP.Net的问题URLDecoding字符串(国际字符)

时间:2011-09-06 11:08:50

标签: c# character-encoding

我有一个来自ASP页面的字符串,我正在尝试对其进行URL解码并将其显示在ASP.Net页面中。

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作为系统默认值,也可以在数字键盘上键入0216或0248的同时按住[Alt]键在任何键盘设置下键入。 (代码页1252是ISO 8859-1的超集,216和248是十六进制D8和F8的十进制等值。)

这似乎表明输入字符串格式正确(%D8 =Ø)。

1 个答案:

答案 0 :(得分: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"))