VS2019 visual studio 终端调试乱码问题
- 几个相关概念
- 查看和修改终端编码
- 方法1:客户端查看
- 方法2:终端命令查看
- 方法3:注册表
- VS中查看和修改文件编码
- Notepad++ 查看和修改
- Sublime查看和修改
- 解决 visual studio 乱码
- 【问题分析】
作者使用 VS2019 调试 python 程序时,终端打印中文出现乱码。本文收集了网络上解释,发现缺乏系统阐述,且每个解决均缺乏相关背景概念,不利于遇到同样问题的用户排查问题,因此在这里整理了和乱码相关的概念,终端编码和文本编码查看和修改方法。最后对比了常见的乱码解决方法。
几个相关概念
-
"字符集"是字符到其标识代码值的映射。
-
传统字符集是前面的字符编码标准,如使用8位代码值或8位值组合来表示特定语言或地理区域中使用的字符的 Windows代码页。
-
Unicode 是一种全球字符编码标准,当今计算机中最常用的字符集,新的 Windows 应用程序应使用 Unicode 来避免不同代码页的不一致,并有助于简化本地化。
-
双字节代码标志,unicode 在windows应用程序使用 UTF-16 实现,由双字节代码标识。
-
代码页,大多数编写的应用程序都以 Unicode的形式使用 utf-16 编码来处理字符数据。 但是,许多旧版应用程序将继续使用基于代码页的字符集。
表1:代码页标志符
标志符 .net 名称 其他信息 936 gb2312 ANSI/OEM 简体中文 (中国、新加坡) ;简体中文 (GB2312) 65001 utf-8 Unicode (UTF-8) -
旧版本控制台模式,旧版控制台模式是一种兼容性工具,旨在帮助用户在 Windows 10 上运行较旧的命令行工具。 对于在默认 Windows 10 控制台体验中未正确显示或运行的任何命令行工具,此模式提供了一种粗粒度的解决方案,可将系统恢复到较旧版本的控制台托管体验。旧版本和当前版本之间的主要已知差异是 UTF-8 的实现。 旧版主机在代码页 65001上提供最基本的 UTF-8 支持[1]。
查看和修改终端编码
方法1:客户端查看
- 打开终端,右键导航栏
- 点击属性,计入“选项” 页,查看当前代码页设置

方法2:终端命令查看
# 使用 chcp(change code page) 查看终端编码
C:\Users\***>chcp
Active code page: 65001
# 改变终端编码
C:\Users\***>chcp 936
Active code page: 936
方法3:注册表
通过终端修改字符集方法为临时修改,永久默认为utf-8编码格式可参考windows cmd客户端字符集编码修改
VS中查看和修改文件编码
- 参考为文件菜单项,添加高级保存设置

- 选择 Unicode (UTF-8 无签名 - 代码页655001),点击确认

Notepad++ 查看和修改

Sublime查看和修改

解决 visual studio 乱码
系统环境: win11 22000.613
集成开发环境 : Microsoft Visual Studio Community 2019 版本 16.10.3
【问题分析】
乱码是由编码冲突引起,这种冲突发生在文本的编码、终端的编码、终端字体之间。

第一种,修改终端属性,使用旧版控制台。这个作用可能是源文件编码使用旧版本 utf-8,修改成旧版,可以解决已有文件的显示问题,但不能新建文件的显示问题;
第二种,勾选区域语言-Beta版:使用Unicode UTF-8 提供全球语言支持,这个修改方案有会带来其他程序乱码问题。通过该方案奏效的情况可能是 Unicode utf-16 和 utf-8 编码冲突情形。还提到修改字体对中文显示的影响,也可以在出现乱码问题时尝试。

https://docs.microsoft.com/zh-cn/windows/console/legacymode ??