解决方案 »

  1.   

    无法保证按照4分割byte数组,不会将中文的byte给分割开。
      

  2.   

    utf-8是变长编码,理论上是满足iscii的字符占2个字节,中文等占3个字节, 你没4个字节拆分会把中文拆开掉
      

  3.   

    或者考虑在拼接的过程中,除了最后一个子字符串以外,其他字符串的解码数据,都用定长数据进行拼接。
    不明白?
    就是说,你指定了拆分字符串时,二进制数据的长度(那个size参数),那么,你在还原字符串的时候,
    每个分组(除最后一个分组外)都要按照指定的二进制长度(那个size值)来进行拼接。
    如果楼主采用的编码解码方式中,对于未包含字符数据不做替换处理的话,原有数据还是有很大的可能性被还原的。
      

  4.   

    我在做注册码时也遇到过类似的问题。
    原因就出在你把拆分完的byte[]直接转换为String。也就是line 34
    new String()如果遇到不完整的片段,会根据编码自动补位,补出来的内容当然就是乱码了。比较一下前后的十六进制编码就知道了,比如String[] arr = splitByByteSize("abc刘de",4)
    "abc刘de"的十六进制码:(红的是“刘”)
    97 98 99 -27 -120 -104 100 101 
    arr[0]:
    97 98 99 -17 -65 -67
    arr[1]:
    -17 -65 -67 -17 -65 -67 100 101 
    很明显line34 前,两个部分是
    97 98 99 -27 和 -120 -104 100 101
    new String()后就变成
    97 98 99 -17 -65 -67 和 -17 -65 -67 -17 -65 -67 100 101 了所以你想要还原数据,就不要在编码转换过程中new String(),都用byte数组操作就没事了
    个人浅见希望对你有帮助