6

我在 Windows 控制台中输出 unicode 字符时遇到问题。我正在使用带有 mingw32-g++ 编译器的 Windows XP 和 Code Blocks 12.11。

使用 C 或 C++ 在 Windows 控制台中输出 unicode 字符的正确方法是什么?

这是我的 C++ 代码:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    cout << "šđč枊ĐČĆŽ" << endl; // doesn't work

    string s = "šđč枊ĐČĆŽ";
    cout << s << endl;            // doesn't work

    return 0;
}

提前致谢。:)

4

1 回答 1

11

这些字符中的大多数都需要超过一个字节来编码,但是std::cout's 当前被灌输的语言环境将只输出 ASCII 字符。出于这个原因,您可能会在输出流中看到很多奇怪的符号或问号。您应该std::wcout使用使用 UTF-8 的语言环境,因为 ASCII 不支持这些字符:

// <locale> is required for this code.

std::locale::global(std::locale("en_US.utf8"));
std::wcout.imbue(std::locale());

std::wstring s = L"šđč枊ĐČĆŽ";
std::wcout << s;

对于 Windows 系统,您将需要以下代码:

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

int main()
{      
    _setmode(_fileno(stdout), _O_WTEXT);

    std::wstring s = L"šđč枊ĐČĆŽ";
    std::wcout << s;

    return 0;
}
于 2013-07-14T17:32:50.983 回答