码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2021-04-19 15:13:17      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:打开   cmd   显示   编译器   观察   用户   代码   ctrl   coding   

@

问题描述

通过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就能查看到终端采用的编码格式。
技术图片

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

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

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

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

编译编码格式

技术图片
如图点击vscode侧栏运行调试,点击设置小图标,打开launch.json
技术图片

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

问题解决

技术图片

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

标签:打开   cmd   显示   编译器   观察   用户   代码   ctrl   coding   

原文地址:https://www.cnblogs.com/LXJhelloWorld/p/14669059.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!