起因
一开始是使用vscode集成终端时,输入中文(使用Windows10默认中文输入法)无法正常读取,后来用原生PowerShell和CMD也出现同样的问题,具体的调试图就不放了,总之就是读取到缓冲区的为随机乱码,代码如下:
public class InputTest{
public static void main(String args[]){
Scanner in = new Scanner(System.in);
System.out.println(in.nextLine());
in.close();
}
}
不仅是Scanner,其他的读取流也不能正确识别System.in读入的中文
猜测原因、解决方案
猜测可能是字符编码的问题,Window10下系统自带的中文输入法(微软拼音)在输入中文时,默认的编码为GBK,而当终端的活动代码页为UTF-8(65001)时,就无法正确识别,因为找不到方法更改输入法的输出字符编码,所以只能更改终端的活动代码页为GBK(936)
下面为具体操作:(此方法也同样适用于其他中文输入法)
1.更改活动代码为GBK(936)
chcp 936
2.在运行时程序时更改Java虚拟机系统环境编码配置(Dfile.encoding)为GBK
java '-Dfile.encoding=GBK'
注:java源文件还是可以用UTF-8的格式
vscode配置(在安装Debugger For Java扩展时):
1.找到vscode扩展安装目录,进入vscjava.vscode-java-debug目录,找到scripts/launcher.bat,更改代码如下:
@echo off
REM Change code page to UTF-8 for better compatibility.
@chcp.com 936 > NUL
REM Execute real command passed by args
%*
2.找到vscode的launch.json(一般是工作区/.vscode/launch.json),在每次Run Java时,Debugger For Java都会自动生成新的一条配置,找到你要运行的类(假设类名为Example),更改代码如下:
...//省略
{
"type": "java",
"name": "Launch Example",
"request": "launch",
"mainClass": "Example",
"projectName": "repos_eaa33068",
//上面的都保持你的不动
//下面就新加一条
"encoding": "GBK"
},
...//省略
在Windows10中,使用PowerShell或CMD运行Java程序时遇到输入中文出现乱码的问题。分析认为是系统默认GBK编码与UTF-8编码不匹配导致。解决方案包括将终端活动代码页更改为GBK,以及在运行Java时设置-Dfile.encoding=GBK的系统环境变量。对于VSCode,需要修改vscjava.vscode-java-debug目录下的launcher.bat和launch.json配置。
961

被折叠的 条评论
为什么被折叠?



