Console的Code Page说明和设置方法

偶然翻看之前的文章,在一个关于mysql解决console乱码的主题里看到了自己写的一个解决console乱码的"彩蛋"。当时只是解决了乱码问题,没有详细深入一下根因,这次补上。

Code Page又称作代码页,在Windows系统中用来告诉console如何"理解"二进制代码,即将传输到控制台的字节序列,按代码页"约定"的编码方式,在屏幕上显示出来。

代码页437,是告诉console以ASCII编码字符集来显示,console就会把对应的1byte转换成屏幕上可读的显示字母(或不可见的控制字符)。

例子1:系统传过来的编码序列为:83 79 83,在code page 437下,console去查ASCII编码,按字节顺序,逐一"理解"后,显示出对应的字母是:SOS。

例子2,系统传过来的编码序列为:E4 BD A0 E5 A5 BD,在code page 437下,console去查ASCII编码,按字节顺序,逐一"理解"后,显示出对应的字母是:ä ╜ á å ¥ ╜。这个是啥呀,根本没办法认出来。这个时间,你只要把代码页切换到code page 65001,即让console去查UTF-8的编码,对应的显示就是2个中文字:你好。

是不是很神奇!这个就是有的时候,console输出是乱码的原因:console当前的代码页没法理解当前的字节序列,和当前要显示的字符编码不匹配。举个不是很准确的例子,A说英语,C听得懂中文,得找个把英语翻译成中文的翻译,这时却来了个法语翻译B,经B翻译A后出来的是法语,C听得就像"乱码"。code page的设置就是为了正确的理解字节序列。

字节 -> Code Page -> 字符,代码页就是干的这个工作。

在Windows下,设置代码页,有一个很简单的命令:chcp (change code page),使用方法如下:chcp nnn

chcp // 不带任何参数,显示当前使用的代码页

chcp 65001 // 带上指定的代码页编号,将当前代码页设置为UTF-8

相关推荐
硫酸锌011 小时前
安卓手机连接Windows电脑后通过DHCP服务为手机分配IP地址
android·windows·计算机网络
ClickHouseDB3 小时前
ClickHouse .NET 驱动程序新特性:从 1.0 到 1.3 的演进之路
java·前端·windows
略懂而已14 小时前
腾讯云COS 自动同步 for windows
windows·云计算·腾讯云
weixin1997010801616 小时前
《抖音商品API:/product/detail 与 /product/list 的字段边界与图片合规踩坑》(附 Python 源码)
服务器·网络·windows
小杍随笔17 小时前
egui 0.37 升级实录:卡顿修复与5倍性能回退
windows·rust·egui
aichitang202420 小时前
QCU 2.0.0:补齐 Windows、Linux 与 GNOME Wayland
linux·运维·windows·ai·agent·ai编程
唐钰小宝B20 小时前
深度解读 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别
java·开发语言·windows
北风toto21 小时前
Windows 下用 OpenSSL 生成 SSL 密钥并配置 Nginx 教程
windows·nginx·ssl
2601_9623649721 小时前
升级电脑人脸登录,选购 Windows Hello 模组常见误区
windows·安全·电脑
小陈不好吃21 小时前
Java 泛型与类型擦除:从 PECS 原则到 TypeToken 绕过
java·开发语言·windows·pecs 原则·typetoken绕过