/// <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国"

解决方案 »

  1.   

    为什么不用现成的
    System.Text.Encoding.GetBytes
    System.Text.Encoding.GetString
      

  2.   

    如果你是做web开发就知道了
    在网页中"中国"可以用"&#x4e2d;&#x56fd;"来表示
      

  3.   

    这样就不受编码限制了,多用于wap站
      

  4.   

    效率不是很高,不过比较简洁:
    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));
        }
      

  5.   

    楼主, 你这步骤多余了. 其实完全没必要这么转的......注意下代码页, 用utf-8编码(65001)保存, aspx页面也同样, 输出页面编码也用utf-8, 手机访问就没有问题了. 
      

  6.   

    try        using System.Text.RegularExpressions;        private string WMLStrToStr(string srcStr)
            {
                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);
            }
      

  7.   

    按LZ的StrToWMLStr写个逆函数。
            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;
            }
      

  8.   

            protected string WMLStrToStr(ref string Str)
            {
                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;
            }