关于Unicode字符到GB2312的转换

       在利用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("//","").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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值