关于Windows终端运行JAVA时无法读取输入中文的问题(PowerShell、CMD)

在Windows10中,使用PowerShell或CMD运行Java程序时遇到输入中文出现乱码的问题。分析认为是系统默认GBK编码与UTF-8编码不匹配导致。解决方案包括将终端活动代码页更改为GBK,以及在运行Java时设置-Dfile.encoding=GBK的系统环境变量。对于VSCode,需要修改vscjava.vscode-java-debug目录下的launcher.bat和launch.json配置。

起因

一开始是使用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"
},
...//省略
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值