QT、VS(二)——VS控制台程序显示中文为乱码的问题解决办法

在VS2017新建的C/C++控制台程序显示的中文竟然是乱码,效果图如下:

    VS2017控制台程序显示中文为乱码的问题解决办法

        出现乱码,必然是编码问题。而编码问题就要考虑到多方面的因素,大致分为:文件编码、代码编码、输出结果显示的编码。我们只要以此来检查这三部分,就可以找到乱码的原因。而要想不出现乱码,那么这三部分都需要正确,其中一部分的编码并没有对错之分,编码和解码一致才是正确的。

    1.文件编码

        将cpp文件使用Notepad++软件打开,然后底部状态栏的右边可以看到当前文件的编码。我们可以看到,我们在VS2017里创建的cpp文件,是UTF-8编码。

    2.代码编码

        代码编码指的是在VS项目中,我们在项目属性里指定的字符集,如下图所示:

    VS2017控制台程序显示中文为乱码的问题解决办法

        我们可以看到,VS项目里使用的字符集是Unicode编码。这个编码是对代码中出现的字符串默认使用的编码。所以你看到标题上是项目默认值。如果你在字符串里显式(刻意)指定字符串编码方式,如L"这就是Unicode编码字符串",因为左边有一个大写的字母L。或者使用printf这样的ASCII版本字符串的函数,就只能是ASCII编码。我们一般说的是ANSI编码,ANSI编码就做内码,意思是系统内部使用的编码,会自动将你这些字符串编码为系统默认使用的字符集,我们一般都是GB2312,因为我们是中国。如果我们直接说是ASCII编码,也就是VS2017里对应的多字节字符集。

        如果你在代码中直接写双引号,然后也不管字符集这些,再没有特地指定编码的函数里,系统会自动使用默认的编码字符集来编码字符串,也就是你上面看到的项目属性里的【使用Unicode字符集】。

        如果我们直接创建一个项目,然后输入中文,然后就显示了乱码。自然这个和代码的编码无关。不管你用哪种字符集,都会出现乱码。代码编码乱码一般出现在字符编码转换时出现。

    3.显示编码(解码)

        当控制台程序运行的时候,结果输出在控制台黑窗口中。此时我们才看得到输出的结果。如果确定控制台显示使用的编码呢?我们启动控制台程序,然后在控制台的标题栏里右击,选择“属性”,如下图:

    VS2017控制台程序显示中文为乱码的问题解决办法

        然后弹出一个对话框,如下图所示:

    VS2017控制台程序显示中文为乱码的问题解决办法

        可以看到,控制台使用的是GBK编码,即GB2312编码。找了一下,控制台这里没有修改显示编码的地方。

        检查一遍我们发现,文件编码是UTF-8,代码编码不影响,显示时解码用的是GBK编码。也就是说,存储到文件的字符是UTF-8编码,而我们控制台显示的编码是GBK,自然就是编码不对应,产生了乱码。

        解码的办法就是让保存文件的编码和显示的编码一致即可。前面发现控制台编码不能直接在属性里修改,修改起来不方便。那么我们来改变文件的编码咯。

        我们可以用Notepad++软件将cpp文件的编码修改为ASCII即可,这样就对应到了GBK编码。这样就没有乱码了。当然,VS里也有修改文件编码的功能。在VS2010等VS版本里,在文件菜单下,选中了文件之后,就可以看到高级保存选项,这里就可以修改文件的编码。然而在VS2017却故意去掉了,需要我们额外找出来。

        在“工具”->“自定义”->“命令”界面中,如下图所示:

    VS2017控制台程序显示中文为乱码的问题解决办法

        我们点击“保存选定项”,然后点击“添加命令”,弹出如下界面:

    VS2017控制台程序显示中文为乱码的问题解决办法

        我们在左边选择“文件”,然后在右边选择“高级保存选项(V)...”,确定即可。添加后是这样的:

    VS2017控制台程序显示中文为乱码的问题解决办法

    VS2017控制台程序显示中文为乱码的问题解决办法

        我们发现,文件菜单下的“高级保存选项”就出来了。我们可以用这个菜单项来修改代码文件的编码了,而不需要借助第三方编辑器了。我们打开我们要修改的cpp文件,然后点击“高级保存选项”,弹出如下界面:

    VS2017控制台程序显示中文为乱码的问题解决办法

        开始时显示的是Unicode编码,我们这里已经改为了GB2312编码了。然后确定即可。

        此时我们再编译代码,然后没有乱码了。如下图所示:

    VS2017控制台程序显示中文为乱码的问题解决办法

转自:http://www.cjjjs.com/paper/xmkf/2017105195331208.html

猜你喜欢

转载自blog.csdn.net/qq_37764129/article/details/81112521