windows控制台中文乱码问题集锦
前言
在程序开发中,虽然我们能够统一编码为UTF-8,但还是控制台常常会遇到各种乱码问题。特别是在Windows平台下乱码的原因是多方面的,但归根结底就是编码与解密标准不一致,这里暂不过多总结。
下面列表常见的问题,已经解决方案:
案例及解决方案
cmd 控制台
可以通过
win+R
,打开cmd,标题处右键点击属性
,可以查看当前控制台编码- 临时性修改编码
使用 chcp 命令,例如 chcp 65001
,这回将当前代码页变为 utf-8编码,不过这种方式在关闭 cmd 之后会自动失效。
常用的编码及对应的码值(10进制):
十进制码值 | 对应编码名称 |
---|---|
950 | 繁体中文 |
65001 | UTF-8代码页 |
936 | 简体中文默认的GBK |
437 | MS-DOS 美国英语 |
- 永久性修改
打开注册表,通过win+R
,打开regedit
,进入注册表页面
定位到:HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe
这里可能win7跟win10不太一样,如果没有,可以自个加上。win10的是换成powershell了,如图:
对于没有 CodePage 的,可以鼠标右键-> 新建 -> DWORD(32位)值,创建即可。
当然,大家可以换更新更好用的控制台:terminal,win10商店里就可以搜索下载安装
git cmd 控制台
这个设置比较简单,打开控制台后,在空余区域右键,点击
Options
,点击
Text
,如图设置Locale
和Character set
既可PHP脚本执行
正常来说,PHP输出的内容解码是根据外部的控制台来控制的,但对于PHP版本7以上,及使用win10系统的用户来说,可能会出现执行结果输出乱码的问题,可看下图:(浏览器页面乱码是HTML头部设置问题,本文不细说)
//基于laravel command public function echoText() { $this->info('输出中文测试~~'); }
很奇怪是吧,命令中文可以正常显示,脚本输出的中文却不行
查阅资料:从 PHP 7.0.x 移植到 PHP 7.1.x
可以发现还是得强制设置下output_encoding
和input_encoding
。在php.ini文件修改后,结果正确了: