直接拿一个例子说吧。例子一:
 private void button1_Click(object sender, EventArgs e)
        {  MessageBox.Show(System.Web.HttpUtility.UrlDecode("Sch\u00F6nes Wetter", Encoding.UTF8));
        }返回的内容为:Schönes Wetter 没问题,这就是我想要的。但是事实上是   private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(System.Web.HttpUtility.UrlDecode(textBox1.Text, Encoding.UTF8));
        }输入:Sch\u00F6nes Wetter,点击button1,返回的内容依旧为:Sch\u00F6nes Wetter。如何在下面的情况下进行转码。
我的 Sch\u00F6nes Wetter
是从网页上读出来的返回值,赋值给一个string,再转码,没效果。

解决方案 »

  1.   

    Regex.Escape(textBox1.Text) 下再Decode
      

  2.   

     MessageBox.Show(System.Web.HttpUtility.UrlDecode(Regex.Escape(textBox1.Text), Encoding.UTF8));
    这样?
    textbox1中输入:Sch\u00F6nes Wetter
    弹出:Sch\\u00F6nes\ Wetter
    没用呢。
      

  3.   

    杯具了,从textbox输入被转义了,所以有 \\u00F6 前面一个"\"
    应该避免这样的混合情况,从TextBox输入的都是字符,不要输入编码后的结果。这种情况没办法了,只能是用正则把 \\u[0-9A-F]{4} 挑出来,把string转成byte
    再用Unicode.GetString
    public string ReplaceUnicode2Str(string input)
    {
        Regex regex = new Regex("(?i)\\\\u[0-9a-f]{4}");
        MatchEvaluator matchAction = delegate(Match m) {
            string str = m.Groups[0].Value;
            byte[] bytes = new byte[2];
            bytes[1] = byte.Parse(int.Parse(str.Substring(2, 2), NumberStyles.HexNumber).ToString());
            bytes[0] = byte.Parse(int.Parse(str.Substring(4, 2), NumberStyles.HexNumber).ToString());
            return Encoding.Unicode.GetString(bytes);
        };
        return regex.Replace(input, matchAction);
    }