UNICODE与汉字编码互转

摘要:
为了避免在浏览器中传输数据的时候出现中文乱码,我们可以将内容进行URL编码,当然也可以将内容进行UNICODE编码。将汉字进行UNICODE编码,如:“王”编码后就成了“\u738b”,UNICODE字符以\u开始,后面有4个数字或者字母,所有字符都是16进制的数字,每两位表示的256以内的一个数字。但是在将UNICODE字符编码的内容转换为汉字的时候,字符是从后面向前处理的,所以,需要把字符按照顺序“8b”“73”进行组合得到汉字。

为了避免在浏览器中传输数据的时候出现中文乱码,我们可以将内容进行URL编码,当然也可以将内容进行UNICODE编码。将汉字进行UNICODE编码,如:“王”编码后就成了“\u738b”,UNICODE字符以\u开始,后面有4个数字或者字母,所有字符都是16进制的数字,每两位表示的256以内的一个数字。而一个汉字是由两个字符组成,于是就很容易理解了,“738b”是两个字符,分别是“73”“8b”。但是在将UNICODE字符编码的内容转换为汉字的时候,字符是从后面向前处理的,所以,需要把字符按照顺序“8b”“73”进行组合得到汉字。下面是具体的转化代码。

/// <summary>
/// 将汉字转换为Unicode
/// </summary>
/// <param name="text">要转换的字符串</param>
/// <returns></returns>
public static string GBToUnicode(string text)
{
byte[] bytes = System.Text.Encoding.Unicode.GetBytes(text);
string lowCode = "", temp = "";
for (int i = 0; i < bytes.Length; i++)
{
if (i % 2 == 0)
{
temp = System.Convert.ToString(bytes[i], 16);//取出元素4编码内容(两位16进制)
if (temp.Length < 2) temp = "0" + temp;
}
else
{
string mytemp = Convert.ToString(bytes[i], 16);
if (mytemp.Length < 2) mytemp = "0" + mytemp; lowCode = lowCode + @"\u" + mytemp + temp;//取出元素4编码内容(两位16进制)
}
}
return lowCode;
}

/// <summary>
/// 将Unicode转换为汉字
/// </summary>
/// <param name="name">要转换的字符串</param>
/// <returns></returns>
public string UnicodeToGB(string text)
{
MatchCollection mc = Regex.Matches(text, "([\\w]+)|(\\\\u([\\w]{4}))");
if (mc != null && mc.Count > 0)
{
StringBuilder sb = new StringBuilder();
foreach (Match m2 in mc)
{
string v = m2.Value;
if (v.StartsWith("http://www.cnblogs.com/xczt/admin/file://u/"))
{
string word = v.Substring(2);
byte[] codes = new byte[2];
int code = Convert.ToInt32(word.Substring(0, 2), 16);
int code2 = Convert.ToInt32(word.Substring(2), 16);
codes[0] = (byte)code2;
codes[1] = (byte)code;
sb.Append(Encoding.Unicode.GetString(codes));
}
else
{
sb.Append(v);
}
}
return sb.ToString();
}
else
{
return text;
}
}

免责声明:文章转载自《UNICODE与汉字编码互转》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MySQL-快速入门(14)MySQL性能优化ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C# 通过GUID生成不重复的ID

/// <summary> /// 获得32位字符长度的ID /// </summary> /// <param name="information">获得32位字符长度的ID</param> public static string g...

ubuntu下vi的使用

ubuntu下vi的使用 ssh之后对于server的文件,我习惯用gedit,可是不好改动,于是就用vi. 1、vi的基本概念   基本上vi能够分为三种状态,各自是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode), 各模式的功能区分例如以下:   1) 命令行模式command mod...

linux shell 字符串操作详解 (长度,读取,替换,截取,连接,对比,删除,位置 )

linux shell 字符串操作详解 (长度,读取,替换,截取,连接,对比,删除,位置 ) 1.Linux shell 截取字符变量的前8位 实现方法有如下几种: expr substr “$a” 1 8 echo $a|awk ‘{print substr(,1,8)}’ echo $a|cut -c1-8 echo $ expr $a : ‘(....

Java中文乱码原因

Java中文乱码原因 Java在中文环境中乱码无处不在,而且出现的时间和位置也包涵广泛,具体的解决方法也是千奇百怪。 但是如果能理清其中的脉络,理解字符处 理的过程,对于解决问题很有指导意义,不至于解决了问题也不知道为什么。 其实,原因不外乎出在String输入时和输出时。 首先,Java中的任何String都是以UNICODE格式存在的。 很多人因为在G...

13、ubuntu终端快捷键(参考 dy9776)

1、终端的快捷键 Tab 自动补全 Ctrl+a 光标移动到开始位置 Ctrl+e 光标移动到最末尾 Ctrl+l 相当于clear,即清屏 Ctrl+Z 把当前任务放到后台运行(相当于运行命令时后面加&) Ctrl+d 关闭终端 Ctrl+c 终止进程/命令 Ctrl+r 查找历史命令 Shift+Ctrl+n...

Mac 的 Vim 中 delete 键失效的原因和解决方案(转)

本文转自http://blog.csdn.net/jiang314/article/details/51941479 vim从7.3升级7.4之后,出现MAC上的键盘使用很不顺的现象,譬如;delete按键不能使用,详细解说如下: 本文介绍叙述Mac上vim中delete键失效的原因和解决方案 闲扯:在Mac的键盘上实际是没有 backspace 这个键的...