TCHAR字符显示不正确

时间:2017-05-12 12:58:24

标签: c winapi unicode encoding printf

我有一个简单的代码,argv[1]"Привет"

#include <stdio.h>
#include <tchar.h>
#include <Windows.h>
#include <locale.h>

int _tmain(int argc, TCHAR* argv[])
{
    TCHAR buf[100];

    _fgetts(buf, 100, stdin);

    _tprintf(TEXT("\nargv[1] %s\n"), argv[1]);
    _tprintf(TEXT("%s\n"), buf);
}

在控制台中,我写"Мир"并得到以下结果:

image

如果我使用setlocale(LC_ALL, ""),我会得到以下结果:

image

在这两种情况下,我该怎么做才能获得正确的字符串?

1 个答案:

答案 0 :(得分:2)

显然你的程序有效,除了它无法在控制台窗口上正确打印。这是因为Windows控制台与Unicode不完全兼容。对Visual Studio使用_setmode。这适用于俄语,但某些亚洲语言可能存在其他问题。将WriteConsole用于其他编译器。

Visual Studio示例:

#include <stdio.h>
#include <io.h> //for _setmode
#include <fcntl.h> //for _O_U16TEXT

int wmain(int argc, wchar_t* argv[])
{
    _setmode(_fileno(stdout), _O_U16TEXT);
    wprintf(L"%s", L"Привет\n");

    return 0;
}