Java -Dfile.encoding=UTF-8 干掉乱码

  • java 的执行方式:
  1. java Test.class
  2. jave -jar Test.jar
  3. Jar Test.app
  • 以不同的方式来执行,从控制台中得到的程序输出也不一致
    比如说,刚刚在 eclipse 中还能正常打印出来的汉字,在打成 jar 包以后,
    双击该 jar 文件以 Jar Test.app 的方式来启动,打印出来的文字就成了乱码了。
    毕竟写出来的 java 程序最终还是要打成 Jar 包来使用的,总不能每次都在 eclipse 中启动吧?

  • 只有在启动 java 程序前通过传递参数来更改才有效,程序一经启动就无法再更改了。
    这样的话,也就只有通过传递 jvm 参数的方式来做默认编码的变更了:
    其一,写一个带 -Dfile.encoding=UTF-8 参数的脚本文件来启动;
    其二,用 Jar Bundler.app 打包成 app,效率应该不如第一种方案。
    原理其实都差不多,都只是将更改 jvm 默认编码的操作封装了起来,执行时就不用再手动键入了。

  • 搜索 java 源码,只能找到 4 个文件中包含 file.encoding 的文件,
    也就是说,只有四个文件调用了 file.encoding 这个属性。
    在 java.nio.charset 包中的 Charset.java 中,这段话的意思说的很明确了。
    简单说就是默认字符集是在 java 虚拟机启动时决定的,
    依赖于 java 虚拟机所在的操作系统的区域以及字符集。
    代码中可以看到,默认字符集就是从 file.encoding 这个属性中获取的。

原文地址:https://www.cnblogs.com/cag2050/p/7466987.html