为了避免在浏览器中传输数据的时候出现中文乱码,我们可以将内容进行URL编码,当然也可以将内容进行UNICODE编码。将汉字进行UNICODE编
码,如:“王”编码后就成了“/u738b”,UNICODE字符以/u开始,后面有4个数字或者字母,所有字符都是16进制的数字,每两位表示的256
以内的一个数字。而一个汉字是由两个字符组成,于是就很容易理解了,“738b”是两个字符,分别是“73”“8b”。但是在将UNICODE字符编码的
内容转换为汉字的时候,字符是从后面向前处理的,所以,需要把字符按照顺序“8b”“73”进行组合得到汉字。下面是具体的转化代码。
将邮件列表中的名字(name)进行转换,转换后放回到邮件列表中(mails)
//
将UNICODE编码后的汉字转换回来,如: /u738b
--> 王
MatchCollection mCollection2 = Regex.Matches(name, "([//w]+)|(////u([//w]{4}))");
if (mCollection2 != null && mCollection2.Count > 0)
{
StringBuilder sb = new StringBuilder();
foreach (Match m2 in mCollection2)
{
string v = m2.Value;
if (v.StartsWith("//u"))
{
string word = v.Substring(2);
byte[] codes = new byte[2];
int code = System.Convert.ToInt32(word.Substring(0, 2), 16);
int code2 = System.Convert.ToInt32(word.Substring(2), 16);
codes[0] = (byte)code2;
codes[1] = (byte)code;
sb.Append(Encoding.Unicode.GetString(codes));
}
else
{
sb.Append(v);
}
}
mails[i, 0] = sb.ToString();
}
else
{
mails[i, 0] = name;
}
MatchCollection mCollection2 = Regex.Matches(name, "([//w]+)|(////u([//w]{4}))");
if (mCollection2 != null && mCollection2.Count > 0)
{
StringBuilder sb = new StringBuilder();
foreach (Match m2 in mCollection2)
{
string v = m2.Value;
if (v.StartsWith("//u"))
{
string word = v.Substring(2);
byte[] codes = new byte[2];
int code = System.Convert.ToInt32(word.Substring(0, 2), 16);
int code2 = System.Convert.ToInt32(word.Substring(2), 16);
codes[0] = (byte)code2;
codes[1] = (byte)code;
sb.Append(Encoding.Unicode.GetString(codes));
}
else
{
sb.Append(v);
}
}
mails[i, 0] = sb.ToString();
}
else
{
mails[i, 0] = name;
}
本文介绍了一种将Unicode编码的汉字转换回原始形式的方法,并提供了一段详细的代码示例。通过正则表达式匹配和字符编码转换,实现了从特殊编码格式到正常汉字的准确还原。
1173

被折叠的 条评论
为什么被折叠?



