您好我正在尝试在c ++中打印一个不是英文的字符串,输出始终是????
,例如,我想要打印一个韩国世界'선배'
或泰语单词{ {1}},简单的代码段如下 -
'ยิ่ง'
输出:
main(){
string name("선배");// string name("ยิ่ง");
int len=name.size();
cout<<"\n name: "<<name;
cout<<"\n length "<<len;
}
我好像用英文字符更改字符串行 -
name: ??
length 2
输出:
string name("ab");
更新:我还尝试了name: ab
length 2
,这也是打印问号。
代码 -
wchar_t
我检查了项目的属性,项目属性 - >配置属性 - >一般,字符集设置为“wchar_t *a=L"อดีตรักงานไหม";
wprintf(L"sss : %s \n" , a);
”
任何人都可以告诉我出了什么问题?如何让它打印不同的语言?
问候
答案 0 :(得分:1)
我不熟悉韩国人,但总的来说你需要做两件事:
使用std::locale 或设置正确的代码页使用unicode(例如std::wstring
和std::wcout
)。
将控制台设置为可显示这些字符的字体。 Windows中的默认字体不可以执行此操作。
如果您使用的是Windows,则可以使用SetCurrentConsoleFontEx
设置控制台字体CONSOLE_FONT_INFOEX cfi;
cfi.cbSize = sizeof cfi;
cfi.nFont = 0;
cfi.dwFontSize.X = 0;
cfi.dwFontSize.Y = 16;
cfi.FontFamily = FF_DONTCARE;
cfi.FontWeight = FW_NORMAL;
wcscpy_s(cfi.FaceName, L"Consolas");
SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &cfi);
如果您想将其设置为独立于实际应用程序,或者您没有上述功能的先决条件,则可以查看互联网上的不同指南,例如this one。
我不知道哪种字体可以支持亚洲字符,您需要自己检查一下。任何unicode字体都应该这样做。
答案 1 :(得分:0)
您需要先写入字节顺序标记(BOM),然后才能打印出来。
答案 2 :(得分:0)
我正在使用 Microsoft Visual Studio Community 2019 以希伯来语开展一个项目。
当尝试以任何方式输出非英语字符的字符串文字时,我会在框中得到问号,或者只是问号。我通过在资源管理器中保存一个带有希伯来语名称的文件然后通过 CMD 访问它来检查命令行如何处理这种情况。再次问号。
我猜有一种方法可以将语言包包含在 c++ 脚本中(这就是我现在正在查找的内容),但是看到了这个并想分享我发现的其他内容。通过查看我的代码的反汇编,我注意到汇编程序错误地处理了对寄存器的分配。当加载值(字符)时,Unicode 格式(从右到左)会导致汇编器翻转括号并将前两个(后两个)值移到另一侧,从而导致寄存器中的值不可用:
eax,dword ptr [ב (0BDF3A0h)]
即使我试图保存它,它也出现了错误:它应该是一个零、一个右括号、一个空格,然后是希伯来字符 enter image description here
应该是 [(0בBDF3A0h)]。
(不知何故在我的代码中,我现在有 א 的 Unicode 输出分配给它的值...)
我正在研究如何处理这个问题。希望你知道的比我多 :-) 祝你好运!