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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • jb和jl_32纳米和22纳米有什么区别

    jb和jl_32纳米和22纳米有什么区别一个用于无符号数,一个用于有符号数,即使是在intel的官方手册中,JBE:JUMPSHORTIFBELOWOREQUALJLE:jumpshortiflessorequalbelow有人译为低于,less有人译为小于,但对于中国人来说,这两个完全是一个意思,很容易弄混…

    2022年10月26日
  • 推荐.Net、C# 逆向反编译四大工具利器(请勿用来非法行为)[通俗易懂]

    推荐.Net、C# 逆向反编译四大工具利器(请勿用来非法行为)[通俗易懂]在项目开发过程中,估计也有人和我遇到过同样的经历:运行环境出现了重大Bug亟需解决、或者由于电脑挂了、旧代码覆盖新代码,而在这种情况下,我们不能直接在当前的代码中修改这个Bug然后发布,这会导致更严重的问题,因为相当于版本回退了。还有电脑挂了代码整个都没有,这种情况下我们只能只能利用一些逆向的技巧和工具了来解析在服务器发布好的dll。那么你只是单纯的修改一个.Net程序集中的某个方法或功能,而

  • html中超链接使用_html中的a标签,超链接代码的详细介绍「建议收藏」

    html中超链接使用_html中的a标签,超链接代码的详细介绍「建议收藏」欢迎关注支持,谢谢!今天为大家介绍的是超链接代码a标签的用法,大家有兴趣的话可以看看哟!随着互联网的发展,网站的兴起,超链接随处可见。我们使用电脑或手机上网,能够穿梭在各个网页之间,都是通过超链接实现的。超链接就像通向另一个“世界”的桥梁,我们可以通过它到达另一个“世界”。接下来我们就来学习一下网页中的超链接到底是什么东西。连接一、什么是超链接超链接属于网页的一部分,它是让网页和网页连接的元素。…

  • python 报错: unindent does not match any outer indentation level

    python 报错: unindent does not match any outer indentation level

    2021年11月11日
  • 怎么给iOS项目打包

    怎么给iOS项目打包

  • ffmpeg的安装和使用教程_Anaconda安装ffmpeg

    ffmpeg的安装和使用教程_Anaconda安装ffmpeg一、ffmpeg的简介FFmpeg是一个自由软件,可以运行音频和视频多种格式的录影、转换、流功能,包含了libavcodec——这是一个用于多个项目中音频和视频的解码器库,以及libavformat——一个音频与视频格式转换库。主要参数-i——设置输入档名。-f——设置输出格式。-y——若输出文件已存在时则覆盖文件。-fs——超过指定的文件大小时则结束转换。-t——指定…

发表回复

您的电子邮箱地址不会被公开。

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