运维日志您现在的位置是:首页 > 博客日志 > 运维日志

VS Code C语言输出字符串乱码,调试debug中文显示乱码

<a href='mailto:'>微wx笑</a>的头像微wx笑 2022-03-23运维日志 2 0关键字: vscode  C语言  乱码  

1、C语言写在源代码中的字符串输出是乱码;2、调试debug的时候,从文件中读取的中文监视变量的时候显示乱码,但是输出是正常的。

1、C语言写在源代码中的字符串输出是乱码;

在Windows平台下,如果源代码文件以UTF-8编码保存,编译出来执行的时候,写在源代码中的字符串输出是乱码,即使在编译的时候指定选项也不行。v6K无知

修改文件的编码:v6K无知

打开/切换到要修改编码的文件,点击右下角的编码(显示的是文件当前的编码),然后选择:Save with Encodingv6K无知

image.pngv6K无知

可以通过搜索快速查找目标编码,选择期望的编码就可以了。v6K无知

image.pngv6K无知

编译生成的task.json文件内容:v6K无知

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: gcc.exe gdb",
            "command": "C:/mingw/mingw64/bin/gcc.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-ggdb",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe",
                "-finput-charset=GBK",//输入编译器文本编码 默认为UTF-8
                "-fexec-charset=GBK"//编译器输出文本编码 自行选择
            ],
            "options": {
                "cwd": "C:/mingw/mingw64/bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "编译器: C:/mingw/mingw64/bin/gcc.exe"
        }
    ],
    "version": "2.0.0"
}


v6K无知

统一编码后,输出正常了,但是就有第二个问题了,读取 ANSI 编码的文本文件内容 printf("%s", revbuf[i]); 打印输出是正常的,但是调试的时候看到的都是乱码,看下面的图。v6K无知


v6K无知

2、调试debug的时候,从文件中读取的中文监视变量的时候显示乱码,但是输出是正常的。


v6K无知


v6K无知


v6K无知

image.pngv6K无知


v6K无知

看下图:编码都统一为UTF-8,读取的文件编码也是UTF-8,调试的时候看到的变量值是正常的;但是。。。往下看v6K无知

image.pngv6K无知

但是打印输出的都是乱码!
v6K无知

image.pngv6K无知

不过有一点值得庆幸,通过 fputs(", ", fwp); 写到文件中的内容显示是正常的。v6K无知


v6K无知

将编码都统一为GBK

1、写在.c文件中的字符串输出正常v6K无知

2、读取UTF-8编码的文本文件,调试时监视变量显示正常,但是打印输出乱码。v6K无知

3、写入文件的内容部分乱码。v6K无知

4、读取ANSI编码的文本文件,调试时监视变量显示为乱码,但是打印输出正常,写入文件的内容正常。v6K无知


v6K无知


v6K无知


v6K无知


v6K无知


v6K无知

本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/blog/service/2022-03-23/1126.html

很赞哦! () 有话说 ()