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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java打印数组_Java中打印数组的三种方式

    java打印数组_Java中打印数组的三种方式说明:System.out.println(array);这样是不行的,这样打印是的是数组的首地址。Arrays.toString(array);一维数组定义一个数组:int[]array={1,2,3,4,5};传统的for循环:for(inti=0;i{System.out.println(a[i]);}foreach增强循环:for(inta:array)Sys…

    2022年6月5日
    34
  • mysql启动命令 linux命令,linux下mysql 启动命令

    mysql启动命令 linux命令,linux下mysql 启动命令1,使用service启动、关闭MySQL服务servicemysqlstartservicemysqlstopservicemysqlrestart运行上面命令,其实是service命令去找/etc/init.d下的相关的mysql脚本去执行启动、关闭动作。2,使用/etc/init.d/mysql启动、关闭MySQL服务,[root@DB-Serverbin]#/etc/in…

    2022年5月21日
    61
  • pytest parametrize fixture_qtp参数化

    pytest parametrize fixture_qtp参数化前言当某个接口中的一个字段,里面规定的范围为1-5,你5个数字都要单独写一条测试用例,就太麻烦了,这个时候可以使用pytest.mark.parametrize装饰器可以实现测试用例参数化。官方示

    2022年7月30日
    7
  • vs2005安装步骤_vs安装路径

    vs2005安装步骤_vs安装路径英文补丁431Mhttp://download.microsoft.com/download/6/3/c/63c69e5d-74c9-48ea-b905-30ac3831f288/VS80sp1-KB926601-X86-ENU.exe中文补丁http://download.microsoft.com/download/8/0/7/8071514d-9370-45c3-8af1-4f

    2022年10月6日
    4
  • Spark Streaming Join「建议收藏」

    Spark Streaming Join「建议收藏」多数据源Join思路多数据源Join大致有以下三种思路:数据源端Join,如Android/IOS客户端在上报用户行为数据时就获取并带上用户基础信息。计算引擎上Join,如用SparkStreaming、Flink做Join。结果端Join,如用HBase/ES做Join,Join键做Rowkey/_id,各字段分别写入列簇、列或field。三种思路各有优劣,使用时注意…

    2022年6月30日
    26
  • 使用rz与sz 实现服务器与Windows的文件传输

    使用rz与sz 实现服务器与Windows的文件传输

    2021年5月31日
    91

发表回复

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

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