vscode Java Scanner 获取中文字符串println输出显示乱码问题分析和解决方案

@

目录

问题描述

通过new Scanner(System.in).next();输入一段中文字符串并显示到控制台时,输出的总是一些00???@@@等之类的乱码。

代码如下:

Scanner sc = new Scanner(System.in);
System.out.println("请输入中文:");
String str = sc.next();
System.out.println(str);

问题截图vscode Java Scanner 获取中文字符串println输出显示乱码问题分析和解决方案

问题分析

乱码现象百分之百都是编码问题导致的,而我们日常工作学习中,大致有三个方面涉及到编码格式:

*源文件的查看
*源文件编译和调试
*终端显示运行交互过程

除了以上三点,其实还有一个层面,那就是:

*用户键入层面
这是我们Scanner获取中文字符串输出时产生乱码的根结。

问题原因

由于中文操作系统,用户键入的中文默认采用的都是GBK编码。所以一旦编译和显示采用的编码格式和用户键入的格式不同,就会造成乱码。

解决思路

我们的解决思路是,确保编译和终端交互采用的编码格式和Scanner获取的中文字符串格式一样,都是GBK格式。

首先,明确开发环境的编码格式

源文件编码

编译器右下角显示的就是我们源文件的编码格式,点击如图的UTF-8位置就可以切换源文件打开或者保存的格式。一般这里的编码格式关系到的是我们查看源文件,对控制台输出没影响。
vscode Java Scanner 获取中文字符串println输出显示乱码问题分析和解决方案

终端编码

由于vscode采用的终端一般是基于cmd或者powershell的,在终端中输入chcp就能查看到终端采用的编码格式。
vscode Java Scanner 获取中文字符串println输出显示乱码问题分析和解决方案

如图,返回结果是活动代码页:65001,65001代表的是UTF-8编码,而我们的简体中文GBK编码是:936
我们只需要输入:chcp 936就可以把终端切换成GBK编码。

可是特殊情况,即便切换到936,最终运行的时候还是会变成65001。看下图:
vscode Java Scanner 获取中文字符串println输出显示乱码问题分析和解决方案

在我们调试运行的时候,控制台总是跳过一大串如图的字,观察发现,其中加载过一个launcher.bat文件。ctrl+左键打开这个文件:
vscode Java Scanner 获取中文字符串println输出显示乱码问题分析和解决方案

如图我们发现里面有一行代码@chcp.com 65001 > NUL ,我们把其中的65001改成936.
如果进行到这步还是乱码,那只剩下编译时候的编码格式了。

编译编码格式

vscode Java Scanner 获取中文字符串println输出显示乱码问题分析和解决方案
如图点击vscode侧栏运行调试,点击设置小图标,打开launch.json
vscode Java Scanner 获取中文字符串println输出显示乱码问题分析和解决方案

如图,添加"encoding":"GBK",意思就是此文件编译时采用GBK编码。

问题解决

vscode Java Scanner 获取中文字符串println输出显示乱码问题分析和解决方案

上一篇:windows命令行下 使用Mysql 无法插入中文字符或中文乱码问题


下一篇:Python 学习第一天