前言

在程序开发中,虽然我们能够统一编码为UTF-8,但还是控制台常常会遇到各种乱码问题。特别是在Windows平台下乱码的原因是多方面的,但归根结底就是编码与解密标准不一致,这里暂不过多总结。

下面列表常见的问题,已经解决方案:

案例及解决方案

  • cmd 控制台

    可以通过win+R,打开cmd,标题处右键点击属性,可以查看当前控制台编码

    1603162835.png

    1603162835_1.png

  • 临时性修改编码

使用 chcp 命令,例如 chcp 65001 ,这回将当前代码页变为 utf-8编码,不过这种方式在关闭 cmd 之后会自动失效。
常用的编码及对应的码值(10进制):

十进制码值对应编码名称
950繁体中文
65001UTF-8代码页
936简体中文默认的GBK
437MS-DOS 美国英语
  • 永久性修改

打开注册表,通过win+R,打开regedit,进入注册表页面

定位到:HKEY_CURRENT_USERConsole%SystemRoot%_system32_cmd.exe

这里可能win7跟win10不太一样,如果没有,可以自个加上。win10的是换成powershell了,如图:

1603162835_2.png

对于没有 CodePage 的,可以鼠标右键-> 新建 -> DWORD(32位)值,创建即可。

1603162835_3.png

当然,大家可以换更新更好用的控制台:terminal,win10商店里就可以搜索下载安装

  • git cmd 控制台

    这个设置比较简单,打开控制台后,在空余区域右键,点击Options

    1603162835_4.png

    点击Text,如图设置LocaleCharacter set既可

    1603162835_5.png

  • php脚本执行

    正常来说,PHP输出的内容解码是根据外部的控制台来控制的,但对于PHP版本7以上,及使用win10系统的用户来说,可能会出现执行结果输出乱码的问题,可看下图:(浏览器页面乱码是HTML头部设置问题,本文不细说)

    //基于laravel command
    public function echoText()
    {
            $this->info('输出中文测试~~');
    }

1603162835_6.png

很奇怪是吧,命令中文可以正常显示,脚本输出的中文却不行

查阅资料:从 PHP 7.0.x 移植到 PHP 7.1.x

1603162835_7.png

可以发现还是得强制设置下output_encodinginput_encoding。在php.ini文件修改后,结果正确了:

1603162835_8.png

文章目录