解决思路:
首先明确以下要点:
- Windows10 家庭版 2004
- 系统的“时间和语言”中的区域设置是默认 中文,没有去勾选那个“Beta版:使用Unicode UTF-8提供全球语言支持”的选项
- 系统环境变量JAVA_TOOL_OPTIONS中没有配置“-Dfile.encoding=UTF-8”(如果完全没有添加JAVA_TOOL_OPTIONS这个变量那更好)
当时碰到这个问题确实很棘手,于是查看网上很多人写的方法,最终总结有如下几种方案:
- 直接启用“Beta版:使用Unicode UTF-8提供全球语言支持”的选项:
- 优点:
不用设置什么系统环境变量或者是jvm环境变量,直接一步到位,java中的程序直接调用String.getBytes()会变成使用UTF-8了。 - 缺点:
造成一些旧软件中文乱码显示;
记事本程序打开一些文件会乱码;
如果平常都是不会使用到那些只支持GBK汉化的软件,那没啥毛病,毕竟现在都是Unicode时代了。
- 修改tomcat的log文件编码,idea的terminal由cmd.exe改为使用git应用程序的bash.exe等(然后一大推莫名其妙的操作,虽然有效但不太合理!!!)
当修改jdk编译时读取java文件的默认编码为UTF-8时,有多种方式能达到目的:
-
添加一个系统环境变量JAVA_TOOL_OPTIONS,并配置(追加)“-Dfile.encoding=UTF-8”
image.png
最优解决方案:
-
添加一个系统环境变量JAVA_TOOL_OPTIONS,并配置(追加)“-Dfile.encoding=UTF-8”
image.png
保存并重启idea后,运行点击编译可以马上看到编译成功了,但是控制台打印出来的中文还是乱码,这时候就需要继续下一步的操作了。
注意:添加后会影响所有地方的编译,因为这是一个系统环境变量(全局的);在执行javac命令时也可以添加“-encoding utf-8”参数指定具体的编码。
至于为什么设置全局的,因为如果只是在idea中设置JVM变量,那么在idea的terminal中执行编译命令(如maven install或gradle build)时还是会用GBK编码去编译java源文件,所以依然报错!!!
- 修改cmd的默认编码为utf-8
在注册表位置:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
添加一个字符串项:AutoRun
内容填写:chcp 65001
image.png
- 修改PowerShell的默认编码为utf-8
首先打开PowerShell运行下面的命令(注意复制的时候要带上$符合的)获取当前用户的配置脚本的文件路径:
$Profile
运行后结果示例:
image.png
用记事本打开这个Microsoft.PowerShell_profile.ps1文件(没有这个文件的话就创建),添加以下内容后重启PowerShell就可生效:
chcp 65001
网友评论