/// <summary>
/// 将字符串转换成16进制编码的字符串
/// </summary>
/// <param name="Str"></param>
/// <returns></returns>
protected string StrToWMLStr(string Str)
{
string ReturnStr = "";
char[] b1 = Str.ToCharArray(); foreach (char b in b1)
{
if (b >= 0x4e00 && b <= 0x9fa5)
ReturnStr += "&#x" + Convert.ToString(b, 16) + ";";
else if (b == '&')
ReturnStr += "&";
else
ReturnStr += b.ToString();
}
return ReturnStr;
}StrToWMLStr是将字符串中的中文转换成16进制编码的字符串 只对中文转换
求这个函数逆函数 WMLStrToStr
如:WMLStrToStr(StrToWMLStr("ab中12国"))="ab中12国"
System.Text.Encoding.GetBytes
System.Text.Encoding.GetString
在网页中"中国"可以用"中国"来表示
using System.Text.RegularExpressions;
//... static string Replace(Match m)
{
try
{
string hex = m.Value.Substring(3, m.Value.Length - 4);
return ((char)Convert.ToInt32(hex, 16)).ToString();
}
catch
{
return m.Value;
}
} static string WMLStrToStr(string escaped)
{
Regex regex = new Regex("\\&#[Xx][a-fA-F\\d]{1,4};");
return regex.Replace(escaped, new MatchEvaluator(Replace));
}
{
return Regex.Replace(srcStr, @"&#x([0-9a-f]{4});", new MatchEvaluator(HexToChsDelegate), RegexOptions.IgnoreCase);
} private string HexToChsDelegate(Match m)
{
byte[] array = new byte[2];
array[0] = (byte)Convert.ToInt32(m.Groups[1].Value.Substring(2), 16);
array[1] = (byte)Convert.ToInt32(m.Groups[1].Value.Substring(0, 2), 16);
return Encoding.Unicode.GetString(array);
}
protected string WMLStrToStr(string Str)
{
string ReturnStr = "";
for (int i=0; i<Str.Length; i++)
{
if (i<Str.Length -7)
{
string s = Str.Substring(i, 8);
char[] c = s.ToCharArray(); if (c[0] == '&' && c[1] == '#' && c[2] == 'x' && c[7] == ';')
{
char b = (char)Convert.ToUInt16(Str.Substring(i + 3, 4), 16);
ReturnStr += b.ToString();
i += 7;
continue;
}
}
ReturnStr += Str.Substring(i,1);
}
return ReturnStr;
}
{
int index = Str.IndexOf("&#x");
if (index >= 0 && (index + 8) <= Str.Length)
{
int tmpNum;
if (int.TryParse(Str.Substring(index+3, 4), System.Globalization.NumberStyles.AllowHexSpecifier, NumberFormatInfo.CurrentInfo, out tmpNum))
{
if (tmpNum >= 0x4e00 && tmpNum <= 0x9fa5)
{
Str = Str.Remove(index, 8);
Str = Str.Insert(index, char.ConvertFromUtf32(tmpNum));
Str = WMLStrToStr(ref Str);
}
}
}
return Str;
}