公司因为一项目用.net调用java的webservice接口,要求把中文信息编码为base64后提交,但是用C#编码后提交上去说是错误,无论先把中文转为何种编码,不论是gb2312还是utf8 都不行,请问C#与java的base64编码结果不一致吗?我该如何处理这样的问题:C#编码代码如下    public string ToBase64(string str)
    {
        byte[] b = System.Text.Encoding.UTF8.GetBytes(str);        return Convert.ToBase64String(b);
    }

解决方案 »

  1.   

    帮你顶一下好了。  csdn改了  不能自己往前提帖子了。
      

  2.   


    Encoding.Default.GetBytes(yourstr);看看行不行
      

  3.   

    base64有多种变种,可能是2者使用的标准不同
    参考
      

  4.   

    这个问题我曾今碰到过.关键问题在这: 
    java byte : -128~127
    C#   byte : 0~255这样的话虽然表达到通信层上 都会根据通信适配去转换,但是由于base64是提前就编码了的所以会造成问题.这样的话 我建议 试验一下c#里的sbyte看看.不过看样子挺复杂,需要自己实现很多东西以及看懂java base64 和 C# base64 各自的实现方式
      

  5.   

    碰到是碰到了,后来我的解决方案很BT.中间写了个 java 程序做中间解析层....  反正是我这样傻瓜式解决的.后来我也没有深入分析过.不过我想应该原理如我10楼所述.
      

  6.   

    分两步
    首先把byte[] 变成 sbyte[]
    然后实现 sbyte[]的 base64转换base64是相同的,可以去参考下baidu c#的介绍附 byte- sbyte
    对b 进行下处理
    sbyte [] bSByte  =   new   sbyte [b.Length];
     for  ( int  i  =   0 ; i  <  b.Length; i ++ )
       {
          if  (b[i]  >   127 )
             bSByte[i]  =  ( sbyte )(b[i]  -   256 );
          else 
             bSByte[i]  =  ( sbyte )b[i];
     } 
      

  7.   

    中午午休时间重新看了该问题
    我回答的草率了
    对于utf8 byte-sbyte是没有意义的
    因为 你接着就是 base64
    没有结果
    既然你是汉字转换有问题
    java的默认模式是unicode 我怀疑是 
    utf-16
    这样问题就产生了 因为 base64下 8位数据是不受符号影响的
    楼主可以考虑用 unicode 先转换成 16位字节组
    然后把双字节转换成 SByte组
    然后sbyte组-byte组
    然后 base64主要原因就是对于 231 c# 是单字节  java 是双字节
    所以结果肯定不一样 ok
      

  8.   

    你先要确定是字符编码的问题还是Base64的问题,一般来说Base64不会出现问题的。
    只要看你原始的byte数组和接受端得到的byte数组是不是一样,如果是一样那就跟base64没关系了。
    java接收端的代码呢?