是这样的一个方法
public static String[] splitByByteSize(String content, int size){ byte[] bytes = content.getBytes(); int totalSize = bytes.length; int partNum = 0; if(totalSize == 0){ return new String[0]; } if(totalSize % size == 0){ partNum = totalSize / size; }else{ partNum = totalSize / size + 1; } String[] arr = new String[partNum]; int arrIndex = -1; for(int i=0;i
按字节拆分后等字节的放到String数组中。另外有个方法接收String数组后在拼成content原来的值。现在是如果有中文,按字节拆分会有乱码。但是感觉后面按照String数组拼成字符串应该不会乱码。但是还是乱码。请问怎么做才能在用返回的String数组拼成字符串不乱码。
public static void main(String[] args) throws UnsupportedEncodingException { String arr[] = splitByByteSize("abc刘defghijklmnopqrstuvwxyz",4); int byteLen = 0; for(int i=0;i>"+new String(bytes)); } public static String[] splitByByteSize(String content, int size) throws UnsupportedEncodingException{ byte[] bytes = content.getBytes("utf-8"); int totalSize = bytes.length; int partNum = 0; if(totalSize == 0){ return new String[0]; } if(totalSize % size == 0){ partNum = totalSize / size; }else{ partNum = totalSize / size + 1; } String[] arr = new String[partNum]; int offset = 0; byte newBytes[] = new byte[size]; for(int i=0;i
上面是新代码,但是还有有乱码
楼上正解
楼主, java里字符串不能这么乱搞的啊.
比方说, 一个汉字, 内码unicode转utf8, 三个字节a,b,c, 那么你去按两个字节(ab), 一个字节(c)这样来解码utf8到unicode, 得到的是两个 "replacement character �", 信息在这里丢失了
写个test给你吧.
@Test public void fdfa() throws Exception{ byte[] bytes="中".getBytes("utf8"); System.out.println(bytes.length); //3 byte[] b=new byte[2]; System.arraycopy(bytes, 0, b, 0, 2); String s=new String(b,"utf8"); // s为� System.out.println(s); //打印? }
具体原因呢, 得看一下utf8的编码: http://en.wikipedia.org/wiki/UTF-8
对于三字节的编码来说, 是这个样子的: 1110xxxx 10xxxxxx 10xxxxxx 你只给了1110xxxx 10xxxxxx, java表示很无力, 没办法解码utf8, 所以就给了一个�.
总结一下, 一定按编码格式去 正确 编解码. 否则信息会丢失!
content.getBytes(utf-8)
),否则在传输的时候,很有可能就是个杯具;arr[arrIndex]+=((char)bytes[i])
这个代码,在Java里面可以通过+=运算符将string和char相加?解决办法:如果是要跨JVM传输,建议直接传输byte数组,然后重组;如果不跨JVM传输,可先重组成string,然后传输,不过不是特殊需要,还是建议传输byte数组,最终在接收端重组。在这个过程中,有一点切记:转换过程中务必指定编码。这是我们项目组血的教训,后来重申的重要原则之一。
byte[] array = content.getBytes("utf-8"); // 发送端 String content = new String(array, "utf-8"); // 接收端