java byte转中文乱码_java byte转string 涉及到字节流中有中文[通俗易懂]

java byte转中文乱码_java byte转string 涉及到字节流中有中文[通俗易懂]最近遇到一个问题,我用java写了一个客户端通过socket向服务器端发送消息,发送的内容是字节流,编码格式是GBK,服务器在收到消息后,如果格式正确,会返回固定的消息格式,同样也是字节流,编码格式也是GBK。现在问题来了,我怎么把字节流转换为字符流,当然是要能显示出中文。于是上网搜了一下,找到一篇博客,网址如下:http://bbs.csdn.net/topics/391939108,代码如下:…

大家好,又见面了,我是你们的朋友全栈君。

最近遇到一个问题,我用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中编码格式相互转换,还是比较麻烦的,我到现在也不是很清楚,只能遇到问题一点点解决。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148248.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • idea202012激活码永久_通用破解码

    idea202012激活码永久_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    196
  • c++构造函数是否可以抛出异常_什么叫抛出异常

    c++构造函数是否可以抛出异常_什么叫抛出异常从语法上来说,构造函数和析构函数都可以抛出异常。但从逻辑上和风险控制上,构造函数和析构函数中尽量不要抛出异常,万不得已,一定要注意防止资源泄露。1.构造函数中抛出异常在C++构造函数中,既需要分配内存,又需要抛出异常时要特别注意防止内存泄露的情况发生。因为在构造函数中抛出异常,在概念上将被视为该对象没有被成功构造,因此当前对象的析构函数就不会被调用。同时,由于构造函数本身也是一个函数,在函数体内抛出

    2022年8月12日
    6
  • ASPCMS 错误号:-2147467259 解决办法

    ASPCMS 错误号:-2147467259 解决办法运行网站的时候,居然提示:提示:【】错误号:-2147467259错误描述:未指定的错误其实说白了,出现这种情况,就是权限问题,解决方法如下:A、打开系统目录下的windows/temp属性;(注意:这里是temp文件夹的属性)B、切换到安全标签,在安全标签里面的所有用户组,你都赋予完全控制权限就OK了;如果没有出现安全选项标签的话,请根据以下方法让安全标签出现:1、打开“我的电脑”→工具菜单→文件夹选项→取消“使用简单文件夹共享”前面的打钩√…

    2022年7月13日
    53
  • getopt解析

    getopt解析转载自http://www.cnitblog.com/zouzheng/archive/2007/04/02/25034.aspxgetopt被用来解析命令行选项参数。就不用自己写东东处理argv了。#include      externchar*optarg;  //选项的参数指针      externintoptind,  //下一次调用getopt的时,从

    2022年5月2日
    39
  • oracle 修改表名

    oracle 修改表名ALTER TABLE AA RENAME TO BB;

    2022年5月13日
    37
  • Hello World on Impala

    Hello World on Impala

    2021年11月14日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号