直接拿一个例子说吧。例子一:
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,再转码,没效果。
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,再转码,没效果。
这样?
textbox1中输入:Sch\u00F6nes Wetter
弹出:Sch\\u00F6nes\ Wetter
没用呢。
应该避免这样的混合情况,从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);
}