50,542
社区成员
发帖
与我相关
我的任务
分享
public static void main(String[] args) {
String s = "curl -X POST -H 'content-type: application/json' -d \"{\\\"jsonrpc\\\": \\\"2.0\\\",\\\"method\\\":" +
" \\\"fund.settle.msg.backdoor\\\",\\\"params\\\": {},\\\"id\\\":\\\"12\\\"}\" ";
String b = "curl -X POST -H 'content-type: application/json' -d \"{\\\"jsonrpc\\\": \\\"2.0\\\",\\\"method\\\"" +
": \\\"fund.settle.msg.backdoor\\\",\\\"params\\\": {},\\\"id\\\":\\\"12\\\"}\" ";
System.out.println(getEncoding(s));
System.out.println(getEncoding(b));
}
public static String getEncoding(String str) {
String encode = "GB2312";
try {
if (str.equals(new String(str.getBytes(encode), encode))) { //判断是不是GB2312
String s = encode;
return s; //是的话,返回“GB2312“,以下代码同理
}
} catch (Exception exception) {
}
encode = "ISO-8859-1";
try {
if (str.equals(new String(str.getBytes(encode), encode))) { //判断是不是ISO-8859-1
String s1 = encode;
return s1;
}
} catch (Exception exception1) {
}
encode = "UTF-8";
try {
if (str.equals(new String(str.getBytes(encode), encode))) { //判断是不是UTF-8
String s2 = encode;
return s2;
}
} catch (Exception exception2) {
}
encode = "GBK";
try {
if (str.equals(new String(str.getBytes(encode), encode))) { //判断是不是GBK
String s3 = encode;
return s3;
}
} catch (Exception exception3) {
}
return ""; //如果都不是,说明输入的内容不属于常见的编码格式。
}
两个字符串的空格不一样,第一段空格在 GB2312 编解码后对应的是 ? ,你可以去对照字符集编码表查找这个字符。我单纯的猜想第一个中的空格(它可能只是看起来像空格)是 GB2312 不支持的字符,所以这里的 ? 代表乱码。 这个获取字符串的编码也很有意思,这可能是对字符编码理解有误造成的。String 本身的构造就需要编码支持,无需再通过额外的这类判断去判断该字符串的编码了,属于画蛇添足。出现结果不一样是因为出现了一些编码不支持的字符,造成了 equals 判断无法通过,仅此而已。