跨平台传输中使用base64来保证非ascii码字符串的完整性
首先,我们来看一个例子: [] b= []{2,9,43= String(b,"utf-8"[] b1=ss.getbytes();
这种情况下,b和b1字节数组是相同的。 那下面这种情况呢? [] b= []{-2,-9,"utf-8"[] b1=ss.getbytes();
打印出来的ss是一堆我们看不懂的东西!而且我们发现b和b1字节数组长度都不同啦?为什么? 我们知道ascii编码的范围为0~127,那么-2,-9该如何编码呢?? b1和b的字节表示在传递过程中,数据失真了,那如何解决失真问题呢? 我们可以使用base64对-128~127的值进行改造(具体请自行google之)。 通过使base64编码解码则可以防止传输过程中出错。base64可使用commons-codec的,如下所示: Method Summary [] b= []{-2,43[] s=[] b1=Base64.decode(s);
我们看一下编码后的s是什么样子的? 47,118,99,114
编码后全部变为0~127的ascii编码,解码后b1的值为: -2,43
b和b1相同,没有数据失真。 另外,也可以是使用bouncy castle支持。具体可以google之。 一些小细节: 1. 跨平台传输时可能传输的是十六进制字符串,要转换为byte数组再进行编码,转换方法为:从高位开始,两个十六进制字符为一组转为byte。实例如下: String hex="1a2bcc"; 先拆分,把“1a”,“2b” “cc”分别解析为byte数组 26,43,208? 2. 跨平台要考虑编码格式,如utf-8 或者gbk 或者iso-8895-1等。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |