让Windows CMD默认使用UTF-8代码页,解决一切恼人乱码问题!

问题描述

中文Windows自带的命令行程序默认都是使用的936代码页,也就是GBK的编码,因此当程序以UTF-8编码输出文本时,就会看到乱码:
CMD属性对话框截图
该问题在自己写的C/C++程序中最常见,当源文件以UTF-8编码时,用printfstd::cout等方法打印出来的全都显示乱码,关于C/C++的编码问题可以参见此前的一篇博客。不仅如此,一些间接依赖于Windows原生命令行的程序也会产生乱码问题,例如VS Code的内置终端、Qt Creator等:
Qt Creator错误窗口乱码
这个问题还会导致“字体”选项卡中没有多少选项,使得我们没法用自己安装的等宽字体,使得命令行用起来非常难受……

解决方案

要想从根本上解决问题,必须修改命令行的默认编码,其默认编码是默认跟随系统语言配置的,今天我终于在Windows的语言设置里找到了这个选项:

  1. 打开设置,进入语言页面:

    在这里插入图片描述

  2. 点击“管理语言设置”,再点击对话框上的“更改系统区域设置”:

    在这里插入图片描述

  3. 勾选下图中的选项:

    在这里插入图片描述

  4. 重启电脑,然后你就会神奇地发现CMD和Powershell的代码页都默认变为65001了!

    在这里插入图片描述

注意事项

Stackoverflow上流传一种往注册表里写入@chcp 65001的方案,亲测这种办法没法解决根本问题,而且会导致原来不乱码的程序变乱码!

https://stackoverflow.com/questions/14109024/how-to-make-unicode-charset-in-cmd-exe-by-default

副作用

相信大家肯定能想到,既然有应用因为这项变动不乱码了,那么就会有应用因为这些改动乱码!

这些应用大多是国产的一些软件,它们使用Windows默认的编码输出汉字,所以当你改用UTF-8时,它们反而不好了!

目前已知的一款应用受此影响的是深信服的EasyConnect客户端,它连接成功的提示消息会变成乱码,不过不影响其它的正常使用:
请添加图片描述

如果有朋友发现了因此导致无法运行的应用,请在下面评论区指出。

考虑到这个副作用,那么到底换不换编码呢?这是一个权衡,得看你用的国产软件多不多、以及UTF-8的软件多不多了……或者说,看你是把自己定位为一个普通计算机用户还是软件开发者。

相关文献

  1. 修改Windows控制台默认代码页编码的几种方法
  2. How to set the text encoding within the “Application Output” window?
### 解决方案概述 为了防止在 IntelliJ IDEA 中配置 Tomcat 后出现中文或其他字符集导致的乱码问题,可以采取多种措施来确保编码设置正确无误。具体操作涉及调整 IDE 和 Tomcat 的配置参数。 ### 修改Tomcat日志配置文件 编辑 Tomcat 安装目录下的 `conf/logging.properties` 文件,在其中添加或修改 ConsoleHandler 编码属性: ```properties java.util.logging.ConsoleHandler.encoding = UTF-8 ``` 这一步骤能够有效解决通过 IDEA 控制台查看的日志信息中的乱码现象[^3]。 ### 调整IDEA内部编译器选项 进入 IDEA 设置界面 (`File -> Settings`) ,导航至 `Build, Execution, Deployment -> Compiler` 下拉菜单内的 `Java Compiler` 子项。确认 JVM 参数里包含了 `-Dfile.encoding=UTF-8` 以强制指定源文件读取时采用UTF-8编码方式处理字符串数据[^1]。 ### 更改运行/调试配置 对于每一个基于 Tomcat 创建的应用程序服务实例,都需要单独设定其 VM options 来支持多字节字符集解析: ```bash -Dfile.encoding=UTF-8 -server ``` 此命令行参数同样适用于直接从命令提示符(cmd)启动的情况;不过需要注意的是 Windows 默认情况下并不使用 UTF-8 字符编码作为终端显示标准,因此还需要额外更改注册表键值或者利用 chcp 命令临时切换代码页才能彻底消除外部环境带来的影响[^2]。 ### 更新项目结构定义 最后但并非最不重要的一点是在项目的根级别 `.iml` 或者模块级别的构建脚本(如 Maven 的 pom.xml 或 Gradle 的 build.gradle)中声明正确的字符编码格式用于资源加载过程之中。例如,在Maven工程下可以在pom.xml加入如下片段: ```xml <project> ... <properties> <!-- 指定默认使用的字符集 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> ... </project> ``` 以上步骤综合起来可以帮助开发者们成功规避由于不同平台间存在的差异所引发的各种潜在兼容性障碍以及由此产生的恼人错误消息。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值