zoukankan      html  css  js  c++  java
  • java byte转string 涉及到字节流中有中文

    最近遇到一个问题,我用java写了一个客户端通过socket向服务器端发送消息,发送的内容是字节流,编码格式是GBK,服务器在收到消息后,如果格式正确,会返回固定的消息格式,同样也是字节流,编码格式也是GBK。

    现在问题来了,我怎么把字节流转换为字符流,当然是要能显示出中文。于是上网搜了一下,找到一篇博客,网址如下:http://bbs.csdn.net/topics/391939108,代码如下:

    import java.nio.charset.Charset;
    import java.nio.ByteBuffer;
    import java.nio.CharBuffer;
     
    public class Test{
        public static void main(String[] args){
            String content = "Hello World.你好世界.";
            byte[] bs = content.getBytes();
     
            Charset charset = Charset.defaultCharset();
            ByteBuffer buf = ByteBuffer.wrap(bs);
            CharBuffer cBuf = charset.decode(buf);
     
            System.out.println(cBuf.toString());
        }
    }
    

    从代码不难看出,主要是通过ByteBuffer和CharBuffer相互转换,转换之前需要设置字符的编码格式,因为我是在中文Windows下开发,所以默认的编码格式是GBK,如果你想要设置自己的编码格式,可以调用Charset的forName函数,参数即编码格式。

    这里还有一个细节需要注意,即从字节到字符转换时,不难想象当读取到一个byte小于128时候,直接转英文。当大于128时,因为是GBK编码,所以需要两个连续的字节。

    java中编码格式相互转换,还是比较麻烦的,我到现在也不是很清楚,只能遇到问题一点点解决。

  • 相关阅读:
    解决ecshop进入后台服务器出现500的问题
    Java8新特性(拉姆达表达式lambda)
    使用Optional优雅处理null
    Arrays.asList 存在的坑
    Java提供的几种线程池
    冒泡排序及优化详解
    如何让MySQL语句执行加速?
    关于https的五大误区
    127.0.0.1和0.0.0.0地址的区别
    宽带网络技术-大题重点
  • 原文地址:https://www.cnblogs.com/fxl-njfu/p/7444224.html
Copyright © 2011-2022 走看看