java按字节拆分字符串 后在拼成字符串 Java乱码 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 无法保证按照4分割byte数组,不会将中文的byte给分割开。 utf-8是变长编码,理论上是满足iscii的字符占2个字节,中文等占3个字节, 你没4个字节拆分会把中文拆开掉 或者考虑在拼接的过程中,除了最后一个子字符串以外,其他字符串的解码数据,都用定长数据进行拼接。不明白?就是说,你指定了拆分字符串时,二进制数据的长度(那个size参数),那么,你在还原字符串的时候,每个分组(除最后一个分组外)都要按照指定的二进制长度(那个size值)来进行拼接。如果楼主采用的编码解码方式中,对于未包含字符数据不做替换处理的话,原有数据还是有很大的可能性被还原的。 我在做注册码时也遇到过类似的问题。原因就出在你把拆分完的byte[]直接转换为String。也就是line 34new String()如果遇到不完整的片段,会根据编码自动补位,补出来的内容当然就是乱码了。比较一下前后的十六进制编码就知道了,比如String[] arr = splitByByteSize("abc刘de",4)"abc刘de"的十六进制码:(红的是“刘”)97 98 99 -27 -120 -104 100 101 arr[0]:97 98 99 -17 -65 -67arr[1]:-17 -65 -67 -17 -65 -67 100 101 很明显line34 前,两个部分是97 98 99 -27 和 -120 -104 100 101new String()后就变成97 98 99 -17 -65 -67 和 -17 -65 -67 -17 -65 -67 100 101 了所以你想要还原数据,就不要在编码转换过程中new String(),都用byte数组操作就没事了个人浅见希望对你有帮助 很简单的问题,帮我解释下,谢谢 这个程序片段为啥不能编译?求解 看看这个字符串如何写正则表达式? 关于java里变量初始化顺序的问题 我如果要用C++向JAVA传送LONG型数据和CHAR数据怎么处理? 用javac命令编译时,如果有很多的.jar要import,那么有什么好方法包括进来吗???? (100¥)求助-XML文件转成bytes[],进来就有分。十万火急,今天结贴,在线蹲着! 急:一个连接数据库的问题 使用反射出错,高手看看 两个类之间创建对象但发生死锁的问题,请高手帮助解决! 问个cmd控制台的问题 XML的读取的问题,递归还是面向对象?
不明白?
就是说,你指定了拆分字符串时,二进制数据的长度(那个size参数),那么,你在还原字符串的时候,
每个分组(除最后一个分组外)都要按照指定的二进制长度(那个size值)来进行拼接。
如果楼主采用的编码解码方式中,对于未包含字符数据不做替换处理的话,原有数据还是有很大的可能性被还原的。
原因就出在你把拆分完的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数组操作就没事了
个人浅见希望对你有帮助