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

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

中文乱码产生的原因就是从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";
编程小号
上一篇 2025-02-06 09:27
下一篇 2025-01-16 11:21

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/121396.html