如题! 求解~~~~  试了好多解码的函数。 都不行(如 urlencode.....)

解决方案 »

  1.   

    这位大侠,能说清楚点吗?谢谢。我是调用Mobile发短信的接口的
      

  2.   


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Text;
    using System.IO.Ports;
    using System.Threading;
    using System.Text.RegularExpressions;/// <summary>
    ///SMS 的摘要说明
    /// </summary>
    public class SMS
    {
    public SMS()
    {
    //
    //TODO: 在此处添加构造函数逻辑
    //
        }    public static char HexToChar(string hexstring)
        {
            return (char)Convert.ToInt32(hexstring, 16);
        }    public static string CharToHex(char c)
        {
            return string.Format("{0:X}", (int)c);
        }    public static string HexTostring(string hexstring)
        {
            StringBuilder sb = new StringBuilder("");
            for (int i = 0; i < hexstring.Length; i += 4)
            {
                string temp = hexstring.Substring(i, 4);
                sb.Append(HexToChar(temp));
            }
            return sb.ToString();
        }    public static string StringToHex(string s)
        {
            StringBuilder sb = new StringBuilder("");
            foreach (char c in s)
            {
                sb.Append(CharToHex(c));
            }
            return sb.ToString();
        }
        /// <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 + 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;
            }
        }      #region 发送短息        /// <summary>
            /// SendMessage函数用于发送短信.参数strMobileNumber设置手机号码,strMsgContent指
            /// 定要发送的内容
            /// </summary>
            /// <param name="strMobileNumber">手机号码</param>
            /// <param name="strMsgContent">要发送的内容</param>
            /// <returns> 返回指示发送是否成功</returns>
            public bool SendMessage(string strMobileNumber,string strMsgContent)
            {
                SerialPort serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
                serialPort.WriteTimeout = 2000;
                try
                {
                    serialPort.ReadBufferSize = 900000;
                    if (serialPort.IsOpen) serialPort.Close();
                    serialPort.Open();
                    serialPort.WriteLine("ATZ\r");
                    Thread.Sleep(500);
                    serialPort.ReadExisting();
                    serialPort.WriteLine("AT+CSMP=1,167,0,8" + "\r");
                    serialPort.Write("AT+CMGS=" + strMobileNumber + "\r");
                    Thread.Sleep(1000);
                    string content = GBToUnicode(strMsgContent);
                    serialPort.Write(content + Convert.ToChar(26).ToString());
                    Thread.Sleep(2000);
                    string msg = serialPort.ReadExisting();
                    serialPort.Close();
                    return true;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    return false;
                }
                finally
                {
                    //保证操作完成以后关闭端口,避免占用
                    if (serialPort.IsOpen)
                        serialPort.Close();
                }
            }
        #endregion
    }
      

  3.   

    谢谢您,可是还是不行...依然乱码最后我跟那边的客服联系了一下,他发给我一段中文编码的代码,结果好了。结贴!谢谢各位  共享一下,共同进步
    =======================================================================
     /// <summary>
            /// 中文编码
            /// </summary>
            /// <param name="cstr"></param>
            /// <returns></returns>
            private string UrlEncode(string url)
            {
                Encoding encod = Encoding.GetEncoding("gb2312");
                byte[] buffer = encod.GetBytes(url);
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < buffer.Length; i++)
                {
                    if (buffer[i] > 126)
                    {
                        sb.Append("%");
                        sb.Append(buffer[i].ToString("x"));
                        if (i == buffer.Length - 1)
                        {
                            break;
                        }
                        //sb.Append("%");
                    }
                    else
                    {
                        sb.Append(encod.GetString(buffer, i, 1));
                    }
                }
                return sb.ToString();
            }