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
就能查看到终端采用的编码格式。
如图,返回结果是
活动代码页: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输出显示乱码问题分析和解决方案的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-04TiDB 资源管控的对撞测试以及最佳实践架构
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现