在利用Reflector进行程序集反编译查看时,经常可以看到用Unicode编码的原中文字符串,如:this.str = "\u6570\u636e\u5e93\u64cd\u4f5c\u95ee\u9898\uff0c\u8bf7\u60a8\u91cd\u65b0\u767b\u5f55\uff01";,其实源代码中是:this.mvarError = "数据库操作问题,请您重新登录!";如是想做一个简单的Unicode编码到Gb2312编码进行转换的小工具,应该很简单,不是吗?
       新建一窗体,放一两个TextBox控件,一个用来接受待解码的Unicode编码,另一个将转换的中文结果进行输出,再加一个Button按键,来进行转换操作。
      然而,不管理我怎么转换,输入是什么,输出的仍然是什么。但如果不是从TextBox控件的Text属性中取得输入的Unicode编码值,而是直接在源代码编辑器中写string str = "\u6570\u636e\u5e93\u64cd\u4f5c\u95ee\u9898\uff0c\u8bf7\u60a8\u91cd\u65b0\u767b\u5f55\uff01";赋值语句,DotNet会自动识别其为Unicode编码,直接返回str,即可得到中文(如果当前线程相关的语言文化为“zh-CN”),但如果是从TextBox中取的值,DotNet会为其加上“@”符号,识别为字符串。
      怎么把从TextBox.Text中取得的str=@"\u6570\u636e\u5e93\u64cd\u4f5c\u95ee\u9898\uff0c\u8bf7\u60a8\u91cd\u65b0\u767b\u5f55\uff01"  在源代码中变为str="\u6570\u636e\u5e93\u64cd\u4f5c\u95ee\u9898\uff0c\u8bf7\u60a8\u91cd\u65b0\u767b\u5f55\uff01",从而返回中文呢?
      DotNet中好像没有提供很好的方法,一个小小的Unicode编码到GB2312编码的工具也做不下去了
       
      后记:其实是自已对Unicode的编码不太了解,Unicode编码中"\u"后面的4位16进制数字为即为Unicode码值,只有分解对应的数据,转换为16进制后,再转为Char字符,即可实现Unicode编码到中文的转换。
public string ConvertToGb2312(string str)
{
 string[] strArray = str.Replace("http://www.cnblogs.com/reommmm/admin/file://","").Split('u'/);
 byte[] bytesArray = new byte[strArray.Length];
 char[] charArray = new char[strArray.Length];
 string ret=string.Empty;
 for(int i=0;i<strArray.Length;i++)
 {
  if(strArray[i].Length==0) continue;
  charArray[i] = System.Convert.ToChar(System.Convert.ToInt32(strArray[i],16));

  //charArray
  ret += charArray[i].ToString();
 }
 
 return ret;
}