采用什么Modem?
7-bit和ucs32,看看这里,我做Siemens T35用的是ucs32模式,没问题。SMS是由Etsi所制定的一个规范(GSM 03.40 和 GSM 03.38)。当使用7-bits编码时,它可以发送最多160个字符;但用8-bit编码,最多可以发送140个字符,通常无法直接通过手机显示;还有用16-bit编码时,最多70个字符,被用来显示Unicode(UCS2)文本信息,可以被大多数的手机所显示。我们今天讨论的是UCS2编码,也就是说,最多只能发送70个字符,不管英文还是中文。

解决方案 »

  1.   

    用手机连到电脑来发送短信
    我用的是7-bit编码 用ucs2 编码时正常 没问题 
    但是用7-bit编码 最后字节总会丢失几位
    算法如下 网上找到 版本都一样 应该不会错
    int iLeft=0;
    string sReturn="";
    StringBuilder sb=new StringBuilder();
    for(int i=0;i<s.Length;i++)
    {
    // 取源字符串的计数值的最低3位
    int iChar = i & 7; 
    byte bSrc=(byte)char.Parse(s.Substring(i,1));
    // 处理源串的每个字节
    if(iChar == 0)
    {
    // 组内第一个字节,只是保存起来,待处理下一个字节时使用
    iLeft = (int)char.Parse(s.Substring(i,1));
    }
    else
    {
    // 组内其它字节,将其右边部分与残余数据相加,得到一个目标编码字节
    sReturn=(bSrc << (8-iChar) | iLeft).ToString("X4");
    // 将该字节剩下的左边部分,作为残余数据保存起来
    iLeft = bSrc >> iChar;
    // 修改目标串的指针和计数值 pDst++;
    sb.Append(sReturn.Substring(2,2));
    string ssss=sb.ToString();

    }
    string sss=sb.ToString();
    sb.Append(sReturn.Substring(0,2));
    string ss=(sb.Length/2).ToString("X2")+sb.ToString();
    return (sb.Length/2).ToString("X2")+sb.ToString();