在windows版的微信上编辑两段字符串 为什么会出现编码方式不同

un-understander 2016-09-23 09:39:31
各位大神我昨天在windows微信上分两次编辑了两段一模一样的字符串,结果出现了这两段字符串的编码方式不同 求解释
字符串如下:
curl -X POST  -H 'content-type: application/json'  -d "{\"jsonrpc\": \"2.0\",\"method\": \"fund.settle.msg.backdoor\",\"params\": {},\"id\":\"12\"}" 
curl -X POST -H 'content-type: application/json' -d "{\"jsonrpc\": \"2.0\",\"method\": \"fund.settle.msg.backdoor\",\"params\": {},\"id\":\"12\"}"
复制到IDEA中检查它的编码方式如下:

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 ""; //如果都不是,说明输入的内容不属于常见的编码格式。
}


结果如下;
ISO-8859-1
GB2312


ps: getEncoding()方法来自百度知道 的198901245631用户
地址:http://zhidao.baidu.com/link?url=AC78q_dnVzx-dz1QiPc9JWNz0O2CPoZAXJdtzHiYg4KLoxoIiLWc5Qxa2yFzc1QOJ6TWrFtFYQsu7kAE1rF42K

平时逛的少不知道有那些大神 邀请来自系统推荐
...全文
274 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
荆轲刺秦 2021-07-14
  • 打赏
  • 举报
回复

两个字符串的空格不一样,第一段空格在 GB2312 编解码后对应的是 ? ,你可以去对照字符集编码表查找这个字符。我单纯的猜想第一个中的空格(它可能只是看起来像空格)是 GB2312 不支持的字符,所以这里的 ? 代表乱码。 这个获取字符串的编码也很有意思,这可能是对字符编码理解有误造成的。String 本身的构造就需要编码支持,无需再通过额外的这类判断去判断该字符串的编码了,属于画蛇添足。出现结果不一样是因为出现了一些编码不支持的字符,造成了 equals 判断无法通过,仅此而已。

家里敷泥呀 2016-09-26
  • 打赏
  • 举报
回复
引用 4 楼 wl827455432 的回复:
[quote=引用 1 楼 Q80470101 的回复:] 引用的这段代码,0个赞、10个踩,你居然还用它? 这段代码明显有问题啊。
即使他的代码有问题 那为什么能得到两种结果呢 [/quote] 你把这些编码的顺序调整一下,把下面的放到上面去试试
un-understander 2016-09-23
  • 打赏
  • 举报
回复
引用 1 楼 Q80470101 的回复:
引用的这段代码,0个赞、10个踩,你居然还用它? 这段代码明显有问题啊。
即使他的代码有问题 那为什么能得到两种结果呢
un-understander 2016-09-23
  • 打赏
  • 举报
回复
引用 1 楼 Q80470101 的回复:
引用的这段代码,0个赞、10个踩,你居然还用它? 这段代码明显有问题啊。
为什么有问题 我觉得 不是不可行啊
家里敷泥呀 2016-09-23
  • 打赏
  • 举报
回复
引用 1 楼 Q80470101 的回复:
引用的这段代码,0个赞、10个踩,你居然还用它? 这段代码明显有问题啊。
我也去踩一脚,现在是11个
家里敷泥呀 2016-09-23
  • 打赏
  • 举报
回复
引用的这段代码,0个赞、10个踩,你居然还用它? 这段代码明显有问题啊。

50,542

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧