type
status
date
slug
summary
tags
category
icon
password
Property
Oct 21, 2022 10:25 AM
问题原因
由于代码的编码和控制台的编码是两套独立的编码,因此,他们之间想要交流并互相听明白,就需要有“共同语言”。一篇文章中对两者的编码不同会出现的结果做了汇总,情况是这样的:
- 当代码文件编码为 UTF-8,控制台编码为 UTF-8 时:控制台无法输入中文 ,但可以输出中文
- 当代码文件编码为 GBK,控制台编码为 UTF-8 时:控制台无法输入中文 ,也无法输出中文
- 当代码文件编码为 UTF-8,控制台编码为 GBK 时:控制台可以输入中文 ,但无法输出中文
- 当代码文件编码为 GBK,控制台编码为 GBK,时:控制台可以输入中文 ,也可以输出中文 ————————————————
我的情况属于第一种,这里就要问问题了,为什么代码文件编码和控制台编码同为 UTF-8,却只能单向交流中文呢?如果控制台编码为
UTF-8
,那么输入的中文一般都是 3
个字节,保存下来都变成了一个字节,所以此时无论怎样都拿不到中文。修改方式
如果系统级的改为 936,代码的移植性可能不是太好,下载源码时候,毕竟老外不会用
936
,因此,我就不准备改注册表了,控制台的编码格式就保持这样吧先,我在程序里临时控制控制台的编码。通过 `System("chcp 936");` 执行对控制台编码方式的改变。如果其他系统函数,比如 System("cls"); 会修改这个编码,我重新执行一遍这条指令就行。我这里刚好只用到这两条指令,就封装了一个函数,将这两个函数一起调用。(TODO:完善)参考资料
- 作者:伯涵
- 链接:https://bohnbro.cn/article/cincannotseehanzi
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。