c++ 未显示Unicode输出

wtlkbnrh  于 2023-02-14  发布在  其他
关注(0)|答案(3)|浏览(143)

我正在学习Windows中的Unicode编程。
我有一个简单的程序:

#include <iostream> 
#include <string> 

int main()
{
    std::wstring greekWord = L"Ελληνικά";
    std::wcout << greekWord << std::endl;
    return 0;
}

但是,它什么也不输出.有什么想法如何使它输出希腊语?
我试着添加非希腊字母,但效果也不太好。

lb3vh1jj

lb3vh1jj1#

首先要做的是使程序不依赖于源文件的编码,所以使用Unicode转义而不是Unicode字符

std::wstring greekWord = L"\u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC";

在源文件中有不正确的编码只是阻止你打印希腊语的众多因素中的一个。另一个明显的问题是你的终端打印希腊字母的能力。如果它不能做到这一点,或者需要正确设置才能做到这一点,那么你在程序中所做的任何事情都将无法工作。
也许你想修复源代码编码的问题,这样你就可以在代码中使用未转义的文本,但是这取决于你使用的编译器/IDE。

qlfbtfca

qlfbtfca2#

如果你输出你的cout到一个普通的控制台,那么控制台通常不支持unicode文本,比如希腊语,试着设置它为unicode文本,或者找到另一种方式来输出你的数据,比如txt文件或者一些gui。

nfzehxib

nfzehxib3#

有两种方法可以做到这一点。
旧的、非标准的Microsoft方式如下:

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

int main()
{
    _setmode(_fileno(stdout), _O_U16TEXT);
    _setmode(_fileno(stdin), _O_WTEXT);
    // your code here
}

你会发现这无处不在,但这不一定是一个很好的方式来解决这个问题。
更符合标准的方法如下:

#include <locale>

int main()
{    
    std::locale l(""); // or std::locale l("en_US.utf-8");
    std::locale::global(l); // or std::wcout.imbue(l); std::wcin.imbue(l); 
    // your code here
}

这应该也适用于其他现代编译器和操作系统。

相关问题