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)
上一篇 2022年7月9日 上午11:36
下一篇 2022年7月11日 上午6:00


相关推荐

  • docker 查看端口被占用进程[通俗易懂]

    docker 查看端口被占用进程[通俗易懂]以下找到相应进程或容器后,可以将对于进程或容器停止或删除现在希望启动一个dockercontainer,把container中的80端口映射到宿主机。[root@cmdb2~]#dockerrun-p80:80-it9d1c954badc7/bin/bash[root@cmdb2~]#dockerpsCONTAINERIDIM…

    2022年7月27日
    86
  • JAVA:基于ARCGIS二次开发可视化开发环境搭建

    JAVA:基于ARCGIS二次开发可视化开发环境搭建这两天为了搭建这么一个基于java的ArcGIS二次开发环境可着实花了一番心血。在网上搜索各种资料,大部分都是基于C#的,关于JAVA的很少,而且很杂乱,没有一个完整的、详细的、适合新手的这么一个教程。所以,当我在奋斗两天且重装一次系统,终于安装成功之后,写下这篇文章,让用java进行基于ArcEngine二次开发的人可以少走弯路。因为ArcEngine只能在32位系统上面运行,所以当前系统为64

    2022年7月23日
    16
  • 【程序人生】程序员接私活常用平台汇总

    【程序人生】程序员接私活常用平台汇总00 目录文章目录 00 目录 01 前言 02 程序员客栈 03 码市 04 猪八戒网 05 开源众包 06 智城外包网 07 实现网 08 猿急送 09 人人开发 10 开发邦 11 电鸭社区 12 快码 13 英选 14 Upwork15 Freelancer16 Dribbble17 Remoteok18 Toptal19 AngelList20 Topcoder21

    2026年3月18日
    2
  • 了解大数据的技术生态系统 Hadoop,hive,spark(转载)

    了解大数据的技术生态系统 Hadoop,hive,spark(转载)

    2022年1月7日
    45
  • 本地部署扣子(Coze)详细教程,搭建私有AI智能助手

    本地部署扣子(Coze)详细教程,搭建私有AI智能助手

    2026年3月12日
    2
  • 什么是SPU和SKU

    什么是SPU和SKUSPU StandardProd nbsp 标准产品单位 nbsp 概念 SPU 是商品信息聚合的最小单位 是一组可复用 易检索的标准化信息的集合 该集合描述了一个产品的特性 nbsp 通俗点讲 属性值 特性相同的货品就可以称为一个 SPU nbsp 例如 iphone7 就是一个 SPU 与商家 与颜色 款式 套餐都无关 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp

    2026年3月26日
    2

发表回复

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

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