大家好,又见面了,我是你们的朋友全栈君。
中文乱码产生的原因就是从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账号...