java中单字节操作过程(byte转String 字符问题)

博客介绍了Java中涉及单字节操作时,直接转换为String会有信息丢失或异常字符。回顾了ISO8859-1单字节存储、GBK双字节存储等字符知识,指出ISO8859-1编码范围及应用场景,还给出代码示例说明使用该编码处理字节数组与字符串转换的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java中如果涉及到单字节操作,如果直接转换为String等,会有信息丢失或异常字符,

简单整理如下,这里可以再回顾下字符知识(ISO8859-1是单字节存储,GBK是双字节),

别名是Latin1,Iso-8859-1编码是属于单字节的编码,即编码的范围是0到255.总共能表示256个字符,向下兼容了ACSII,也就是在ASCII编码的基础上扩展了127-255之间位置。编码范围是0x00-0xFF,涵盖了部分西欧的语言字符.由于和计算机的存储单元一样,应用比较广泛,例如在网络传输协议中和Mysql数据库默认的编码。
 

参考https://blog.youkuaiyun.com/lili13897741554/article/details/82053351

代码示例:

// 返回客户端信息
        InputStream input = socket.getInputStream();
        byte[] bte = new byte[1024];
        int len;
        StringBuilder sb = new StringBuilder();
        while ((len = input.read(bte)) != -1) {
            //发现转换后,字节被变更
            sb.append(new String(bte, 0, len, "iso8859-1"));
        }
        
        //获取系统默认编码  
        System.out.println(System.getProperty("file.encoding"));   
        //获取系统默认的字符编码 
        System.out.println(Charset.defaultCharset()); 
        //获取系统默认语言
        System.out.println(System.getProperty("user.language"));

        //Java中byte[]转String问题 丢失字节;ISO-8859-1 仍然是单字节编码,它总共能表示 256 个字符。
        //new String使用其他编码如GBK,GB2312的话一样也会导致字节数组发生变化,因此要想获取String里单字节数组,就应该使用iso8859-1编码
        System.out.println("Start.info from client :" + sb.toString());
        String resp = sb.toString();
        byte[] srcBuf = resp.getBytes("iso8859-1");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值