使用c ++打印字符串,用于英语以外的语言

时间:2014-10-21 06:01:52

标签: c++ string visual-studio-2010

您好我正在尝试在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);

任何人都可以告诉我出了什么问题?如何让它打印不同的语言?

问候

3 个答案:

答案 0 :(得分:1)

我不熟悉韩国人,但总的来说你需要做两件事:

  • 使用std::locale 设置正确的代码页使用unicode(例如std::wstringstd::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 输出分配给它的值...)

我正在研究如何处理这个问题。希望你知道的比我多 :-) 祝你好运!

更多: As variable as string literal