\u开头的编码转换问题

77413036 2011-05-27 03:37:49
直接拿一个例子说吧。

例子一:
 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,再转码,没效果。


...全文
1192 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingdom_0 2011-05-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fangxinggood 的回复:]

杯具了,从textbox输入被转义了,所以有 \\u00F6 前面一个"\"
应该避免这样的混合情况,从TextBox输入的都是字符,不要输入编码后的结果。

这种情况没办法了,只能是用正则把 \\u[0-9A-F]{4} 挑出来,把string转成byte。。。
再用Unicode.GetString
C# code
public string ReplaceUnicode2Str……
[/Quote]学习!
机器人 2011-05-30
  • 打赏
  • 举报
回复
杯具了,从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);
}


77413036 2011-05-30
  • 打赏
  • 举报
回复
咱就木有人解惑~~~
77413036 2011-05-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fangxinggood 的回复:]
杯具了,从textbox输入被转义了,所以有 \\u00F6 前面一个"\"
应该避免这样的混合情况,从TextBox输入的都是字符,不要输入编码后的结果。

这种情况没办法了,只能是用正则把 \\u[0-9A-F]{4} 挑出来,把string转成byte。。。
再用Unicode.GetString

C# code
public string ReplaceUnicode2St……
[/Quote]

辛苦了。感谢!结贴了。
77413036 2011-05-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fangxinggood 的回复:]
Regex.Escape(textBox1.Text) 下再Decode
[/Quote]
MessageBox.Show(System.Web.HttpUtility.UrlDecode(Regex.Escape(textBox1.Text), Encoding.UTF8));
这样?
textbox1中输入:Sch\u00F6nes Wetter
弹出:Sch\\u00F6nes\ Wetter
没用呢。
机器人 2011-05-27
  • 打赏
  • 举报
回复
Regex.Escape(textBox1.Text) 下再Decode

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧