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


相关推荐

  • android插件化资源_android 插件化

    android插件化资源_android 插件化AndroidEagleEye是一个基于Xposed的应用,可以实现对Android系统API与应用自身方法的Hook,最终会将Hook的API或方法的信息以Log的形式输出,包括应用的uid、API或方法的名称、参数信息等。在使用AndroidEagleEye过程中对设备造成的任何风险自负特色可实现对Android系统API以及应用自身方法的Hook可根据配置

    2022年8月16日
    8
  • horspool算法讲解_string匹配字符串

    horspool算法讲解_string匹配字符串Horsepool算法是Boyer-Moore算法的简化版本,这也是一个空间换时间的典型例子。算法把模式P和文本T的开头字符对齐,从模式的最后一个字符开始比较,如果尝试比较失败了,它把模式向后移。每次尝试过程中比较是从右到左的。假设文本中,对齐模式最后一个字符的元素是c,Horspool算法根据c的不同情况来确定移动距离,无论c是否和模式的最后一个字符相匹配。一般来说,会存在下面四种情况。情况1:看

    2022年8月21日
    6
  • NPS监控体系详解

    NPS监控体系详解1.NPS监控原理及意义原理:通过定期调研市场用户的净推荐值,牵引质量在具体领域的改进;优势:践行绝对的用户导向将品牌影响力、产品销量、市场份额与历史数据表现联系起来2.NPS数据回收以手机产品为例,从用户使用产品之日起的整个使用体验周期分三次发送调研问卷:首月,6月,18月;3.NPS监控指标体系NPS:产品NPSNPS1,NPS2,NPS3:按生命周期阶段分NPS1,NPS2,NPS3δNPS:阶段差值为δNPS=NPSM-NPS1领域NPSM关注度好评率差评率**用户

    2022年6月2日
    67
  • extremedb是开源的吗_最简单的数据库开发软件

    extremedb是开源的吗_最简单的数据库开发软件最近我接触了嵌入式数据库eXtremeDB,由于这方面资料很少,网上的参考资料都大同小异,只靠着软件本身提供的参考文档进行开发,所以刚开始开发有些困难。故将基本的用法整理一下。关于eXtremeDB的特性,这里就不阐述了,直接从开发开始。下面以简单的模板为例进行阐述。1.构建.mco文件打开记事本,然后另存为XX.mco后缀文件。.mco文件里面需要定义数据库所需的字段类型,名称等,…

    2022年10月14日
    4
  • c++入门教程–-20C++ 类成员函数

    c++入门教程–-20C++ 类成员函数

    2021年3月12日
    140
  • minikube 安装指南

    minikube 安装指南

    2021年5月14日
    124

发表回复

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

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