c_cpp 将utf8文件输出到控制台

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 将utf8文件输出到控制台相关的知识,希望对你有一定的参考价值。

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <string.h>

// https://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt

int wmain(int argc, const wchar_t* argv[])
{
    int mode = _O_U8TEXT;
    const wchar_t* filename = NULL;

    for (int arg = 1; arg < argc; ++arg)
    {
        if (_wcsicmp(argv[arg], L"/U") == 0)
            mode = _O_U16TEXT;
        else
            filename = argv[arg];
    }

    if (filename == NULL)
    {
        wprintf(L"Usage: ConUtf8 [/U] <filename>\n");
        wprintf(L"  /U - output in UTF16\n");
        return 1;
    }

    _setmode(_fileno(stdout), mode);

    FILE* f = NULL;
    if (_wcsicmp(filename, L"-") == 0)
    {
        f = stdin;
        _setmode(_fileno(stdin), _O_U8TEXT);
    }
    else
    {
        errno_t e = _wfopen_s(&f, filename, L"rt+, ccs=utf-8");
        if (e != 0)
        {
            fwprintf(stderr, L"Error opening file \"%s\": %s\n", filename, _wcserror(e));
            return 1;
        }
    }

    while (1)
    {
        unsigned short cin = fgetwc(f);
        if (cin == WEOF)
        {
            if (feof(f))
                break;
            else
                fputwc(L'?', stdout);
        }
        else
            fputwc(cin, stdout);
    }

    if (f != stdin)
        fclose(f);

    return 0;
}

以上是关于c_cpp 将utf8文件输出到控制台的主要内容,如果未能解决你的问题,请参考以下文章

关于乱码

Node.js系列文章:利用console输出日志文件

java控制台中文输出乱码,已经注意文件格式和控制台格式了?

c_cpp 输出像素化的圆圈到控制台。对图形或Minecraft有用。

c_cpp 确定控制台会话是否是交互式的,即输入来自keybaod并输出到屏幕

批量更改文件编码格式 utf8到gb2312