java按字节拆分字符串 后在拼成字符串
怪我咯
怪我咯 2017-04-17 11:07:44
[Java讨论组]

是这样的一个方法

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

上面是新代码,但是还有有乱码

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(2)
迷茫
  • 首先,将string转换成byte流的时候,一定要指定编码(content.getBytes(utf-8)),否则在传输的时候,很有可能就是个杯具;
  • 其次,arr[arrIndex]+=((char)bytes[i])这个代码,在Java里面可以通过+=运算符将string和char相加?
  • 同上代码,对于双字节编码(例如中文),bytes[i]可能会是一个负数,强制转型成char,由于char的取值范围是0〜(2^16)-1,故此时会转换成一个正值,这样拆分后必然出现乱码,而且这个转换不一定是可逆的,此时再也无法由char恢复byte了,所以拆分后自然无法恢复。

解决办法:如果是要跨JVM传输,建议直接传输byte数组,然后重组;如果不跨JVM传输,可先重组成string,然后传输,不过不是特殊需要,还是建议传输byte数组,最终在接收端重组。在这个过程中,有一点切记:转换过程中务必指定编码。这是我们项目组血的教训,后来重申的重要原则之一。

byte[] array = content.getBytes("utf-8");    // 发送端
String content = new String(array, "utf-8");   // 接收端
阿神

楼上正解

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号