- 汉字变乱码:
System.out.println(Main.class.getResource(""));
System.out.println(Main.class.getResource("/"));
System.out.println(URLDecoder.decode(Main.class.getResource("/").getPath(),"utf-8"));
输出结果:
file:/D:/%e5%9b%9bJava%e9%ab%98%e7%ba%a7-%e5%a4%a7%e5%88%80%e9%98%94%e6%96%a7-%e6%9c%8d%e5%8a%a1%e5%8c%96%e6%94%b9%e9%80%a0/subject-4/5-zookeeper/zookeeper-study/target/classes/com/study/mike/zookeeper/
file:/D:/%e5%9b%9bJava%e9%ab%98%e7%ba%a7-%e5%a4%a7%e5%88%80%e9%98%94%e6%96%a7-%e6%9c%8d%e5%8a%a1%e5%8c%96%e6%94%b9%e9%80%a0/subject-4/5-zookeeper/zookeeper-study/target/classes/
/D:/四Java高级-大刀阔斧-服务化改造/subject-4/5-zookeeper/zookeeper-study/target/classes/
参考的是https://blog.csdn.net/donkeyboy001/article/details/88576484
- 另外当原路径中有“+”号时,URLDecoder.decode反倒把它变成了空格,参见:字符解码时加号解码为空格问题探究,如:
String str = "aaa+aaa aaa%2B";
System.out.println("DECODE="+URLDecoder.decode(str,"utf-8"));
输出结果 DECODE=aaa aaa aaa+
,可见URLDecoder把+号解码为空格,把“%2B”解码为+号。
所以我弄了一个简单粗暴的办法同时解决这两问题:
URLDecoder.decode(Main.class.getResource("/").getPath().replaceAll("\\+","%2B"),"utf-8")