我写的解码程序:
/// <summary>
/// 中文短信息UCS2解码
/// </summary>
/// <param name="s">要解码的信息</param>
/// <returns>解码后的中文字符串</returns>
static public string DecodingUCS2(string s)
{
byte [] buf=new byte[s.Length];
for(int i=0;i<s.Length;i+=4)
{
buf[i/2]=byte.Parse(s.Substring(2+i,2),System.Globalization.NumberStyles.AllowHexSpecifier);
buf[i/2+1]=byte.Parse(s.Substring(i,2),System.Globalization.NumberStyles.AllowHexSpecifier);
}
return Encoding.Unicode.GetString(buf);
}

解决方案 »

  1.   

    Private string  UnicodeToGB(string strUnicode)  
        {
           string  GBCode;
           int im,j;
           int [] c=new int[2];
           SomeArrayFunction.RedimArray(c,strUnicode.Length / 4)     '2个字节一个中文
           for(j=0;j<strUnicode.Length \ 4 - 1;j++)
          {
             char d()=strUnicode.ToCharArray(j * 4, 4);
             c[j]="&H"+(string)d;
             c[j]=ChrW(Val(c(j)));//这个函数我不知道有没有。手头没有资料可以查。不过因该可以自己写。
             GBCode += c[j]      //    '将最后的结果返
          }
            
          return GBCode
    }
    public class SomeArrayFunction
    {
    public SomeArrayFunction()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    }
    /// <summary>
    /// 重新生成数组,类似于vb中的Redim函数
    /// 示例:arr=(Int32[])RedimArray(arr,5);
    /// </summary>
    /// <param name="origArray">原数组</param>
    /// <param name="desiresize">重新生成的尺寸</param>
    /// <returns></returns>
    public static Array RedimArray(Array origArray,Int32 desiresize)
    {
    //判断每个元素的类型
    Type t=origArray.GetType().GetElementType();
        //构照有预期数目元素的新数组
    //该数组的类型必须和原数组类型一致
    Array newArray=Array.CreateInstance(t,desiresize);
    //将原数组中的元素复制到新数组中 Array.Copy(origArray,0,newArray,0,Math.Min(origArray.Length,desiresize));
    //返回新数组
    return newArray;
    }
    }