是这样的一个方法
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
上面是新代码,但是还有有乱码
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
content.getBytes(utf-8)),否则在传输的时候,很有可能就是个杯具;arr[arrIndex]+=((char)bytes[i])这个代码,在Java里面可以通过+=运算符将string和char相加?解决办法:如果是要跨JVM传输,建议直接传输byte数组,然后重组;如果不跨JVM传输,可先重组成string,然后传输,不过不是特殊需要,还是建议传输byte数组,最终在接收端重组。在这个过程中,有一点切记:转换过程中务必指定编码。这是我们项目组血的教训,后来重申的重要原则之一。
楼主, java里字符串不能这么乱搞的啊.
比方说, 一个汉字, 内码unicode转utf8, 三个字节a,b,c, 那么你去按两个字节(ab), 一个字节(c)这样来解码utf8到unicode, 得到的是两个 "replacement character �", 信息在这里丢失了
写个test给你吧.
具体原因呢, 得看一下utf8的编码: http://en.wikipedia.org/wiki/UTF-8
对于三字节的编码来说, 是这个样子的: 1110xxxx 10xxxxxx 10xxxxxx 你只给了1110xxxx 10xxxxxx, java表示很无力, 没办法解码utf8, 所以就给了一个�.
总结一下, 一定按编码格式去 正确 编解码. 否则信息会丢失!
楼上正解