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

2021/4/17 1:26:05

本文主要是介绍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);

问题截图乱码截图

问题分析

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

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

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

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

问题原因

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

解决思路

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

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

源文件编码

编译器右下角显示的就是我们源文件的编码格式,点击如图的UTF-8位置就可以切换源文件打开或者保存的格式。一般这里的编码格式关系到的是我们查看源文件,对控制台输出没影响。
在这里插入图片描述

终端编码

由于vscode采用的终端一般是基于cmd或者powershell的,在终端中输入chcp就能查看到终端采用的编码格式。
chcp

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

可是特殊情况,即便切换到936,最终运行的时候还是会变成65001。看下图:
launcher.bat

在我们调试运行的时候,控制台总是跳过一大串如图的字,观察发现,其中加载过一个launcher.bat文件。ctrl+左键打开这个文件:

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

编译编码格式

在这里插入图片描述
如图点击vscode侧栏运行调试,点击设置小图标,打开launch.json
launch.json

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

问题解决

jiejue



这篇关于vscode Java Scanner 获取中文字符串println输出显示乱码问题分析和解决方案的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程