C#汉字Unicode编码相互转换
Unicode和汉字编码⼩知识
将汉字进⾏UNICODE编码,如:“王”编码后就成了“\王”,UNICODE字符以\u开始,后⾯有4个数字或者字母,所有字符都是16进制的数字,每两位表⽰的256以内的⼀个数字。⽽⼀个汉字是由两个字符组成,于是就很容易理解了,“738b”是两个字符,分别是“73”“8b”。但是在将 UNICODE字符编码的内容转换为汉字的时候,字符是从后⾯向前处理的,所以,需要把字符按照顺序“8b”“73”进⾏组合得到汉字。
下⾯是C#汉字Unicode编码相互转换代码。
using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Globalization;
public class GB2312UnicodeConverter
{
///<summary>
///汉字转换为Unicode编码unicode汉字
///</summary>
///<param name="str">要编码的汉字字符串</param>
///<returns>Unicode编码的的字符串</returns>
public static string ToUnicode(string str)
{
byte[] bts = Encoding.Unicode.GetBytes(str);
string r = "";
for (int i = 0; i < bts.Length; i += 2) r += "\\u" + bts[i + 1].ToString("x").PadLeft(2, '0') + bts[i].ToString("x").PadLeft(2, '0');
return r;
}
///<summary>
///将Unicode编码转换为汉字字符串
///</summary>
///<param name="str">Unicode编码字符串</param>
///<returns>汉字字符串</returns>
public static string ToGB2312(string str)
{
string r = "";
MatchCollection mc = Regex.Matches(str, @"\\u([\w]{2})([\w]{2})", RegexOptions.Compiled | RegexOptions.IgnoreCase);
byte[] bts = new byte[2];
foreach(Match m in mc )
{
bts[0] = (byte)int.Parse(m.Groups[2].Value, NumberStyles.HexNumber);
bts[1] = (byte)int.Parse(m.Groups[1].Value, NumberStyles.HexNumber);
r += Encoding.Unicode.GetString(bts);
}
return r;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论