java在Socket传输中文乱码解决思路及代码「建议收藏」

java在Socket传输中文乱码解决思路及代码「建议收藏」中文乱码产生的原因就是从GBK转到UTF-8,或者是不同的编码格式来回转,导致byte[]中存放的字节丢失。思路是:在客户端进行传输前,将需要传输的字节,以一个编码方式进行传输,假设设置GBK,之后在服务端接收到后,先使用newString(byte,“GBK”);去接收,这样只要保证传输时候设置的编码格式和接收的时候设置的编码格式就不会乱码。案例:对方要发报文,报文头中存在编码格式解决方案:publicstaticStringgetCharsetName(byte[]bytes){

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

中文乱码产生的原因就是从GBK转到UTF-8,或者是不同的编码格式来回转,导致byte[]中存放的字节丢失。

思路是:在客户端进行传输前,将需要传输的字节,以一个编码方式进行传输,假设设置GBK,之后在服务端接收到后,先使用new String(byte,“GBK”);去接收,这样只要保证传输时候设置的编码格式和接收的时候设置的编码格式就不会乱码。

案例:对方要发报文,报文头中存在编码格式
解决方案:

public static String getCharsetName(byte[] bytes) { 
   
        byte[] cloneBytes = bytes.clone();
        String xmlMessage = null;
        try { 
   
            xmlMessage = new String(cloneBytes, "GBK");
        } catch (UnsupportedEncodingException e) { 
   
            e.printStackTrace();
        }
        String xmlHeader = null;
        if (xmlMessage != null) { 
   
            xmlHeader = xmlMessage.substring(0, 100);
        }
        if (xmlHeader != null) { 
   
            if (xmlHeader.contains("UTF-8") || xmlHeader.contains("utf-8")) { 
   
                return "UTF-8";
            }
            if (xmlHeader.contains("GBK") || xmlHeader.contains("gbk")) { 
   
                return "GBK";
            }
            if (xmlHeader.contains("GB2312") || xmlHeader.contains("gb2312")) { 
   
                return "GB2312";
            }
        }
        // 否则默认返回GBK编码格式
        return "GBK";
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • java中的类[通俗易懂]

    java中的类[通俗易懂]4.1.类是什么?  1.类–类型–数据类型—复合数据类型—自定义复合数据类型  为什么有复合数据类型?  基本数据类型就8种,在开发中远远不够,所以我们就需要一个可以根据自己的需求随时能制作出一个自己需要的数据类型。  2.类–具有共同性质的一组事物的群体。人类。  在java中用来描述具有共同性质的一组事物的自定义的复合数据类型—类。  复合数据类型的本质—【根据自己的

    2022年7月7日
    23
  • 外边距_外边距和组件宽度

    外边距_外边距和组件宽度margin-top设置元素的上外边距margin-right设置元素的右外边距margin-bottom设置元素的下外边距margin-left设置元素的左外边距margin简写属

    2022年8月2日
    6
  • ajax的实现_JavaScript高级教程

    ajax的实现_JavaScript高级教程点击这里下载PDF文件。  点击这里下载示例文件。  点击这里下载视频文件。  相关内容:AJAX培训第二讲:使用AJAX框架(下)  首先向大家说声抱歉,离上次隔的时间实在太长。由于一度工作比较忙,所以录制就耽搁了。而且后来在录制过程中也麻烦不断,主要原因是我的笔记本比较差,而录制的内容一多,几乎就会处于“僵死”状态,然后Captivate非常容易崩溃,最后连录制内容都弄坏了。录制结束后怎么发布

    2022年9月11日
    2
  • Python写代码的用法建议「建议收藏」

    Python写代码的用法建议「建议收藏」1.MutableandimmutabletypesPython有两种内置或用户定义的类型可变类型是允许就地修改内容的类型。典型的可变列表是列表和词典:所有列表都有变异方法,如 l

    2022年7月5日
    23
  • 汇编语言中AX寄存器(aoc32gx)

    目录1.上节回顾2.H2CSGDMA寄存器组2.1H2CSGDMA标识寄存器2.2H2CSGDMA描述符基地址寄存器2.3H2CSGDMA邻接描述符数量寄存器2.4H2CSGDMA描述符信用寄存器3.C2HSGDMA寄存器组4.下节内容1.上节回顾上节我们讲述了ConfigBlock寄存器组,我们今天来看H2CSGDMA/C2HSGDMA寄存器组,如下。H2CSGDMA/C2HSGDMA寄存器组主要是用来描述每个通道DMA描述符相关的一些

    2022年4月18日
    47
  • 海龟图c语言编程,【编程课堂】海龟作图

    海龟图c语言编程,【编程课堂】海龟作图原标题:【编程课堂】海龟作图0、前言turtle是python内置的一个比较有趣味的模块,俗称海龟作图,它是基于tkinter模块打造,提供一些简单的绘图工具,海龟作图最初源自20世纪60年代的Logo编程语言,之后一些很酷的Python程序员构建了turtle库,让其他程序员只需要importturtle,就可以在Python中使用海龟作图。1、基本功能介绍…

    2022年6月28日
    28

发表回复

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

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