如何在C++控制台中编写西里尔文本

Vex*_*toR 14 c++ encoding character-encoding

例如,如果我写:

cout << "??????!" << endl; //it's hello in Russian
Run Code Online (Sandbox Code Playgroud)

在控制台中它会是这样的??????!.

好的,我知道我们可以使用:

setlocale(LC_ALL, "Russian");
Run Code Online (Sandbox Code Playgroud)

但在那之后,俄语中的命令行参数不起作用(如果我通过BAT文件启动我的程序):

StartProgram.bat

chcp 1251
MyProgram.exe -user=???? -password=??????
Run Code Online (Sandbox Code Playgroud)

因此,setlocale该程序无法正确阅读俄罗斯论点.

这是因为CP1251中的BAT文件,但控制台位于CP866中.

所以,有一个问题:

如何在C++控制台中编写俄语文本,同时正确读取俄语命令行参数.

Nem*_*vic 7

请参阅Michael Kaplan博客中的此条目:

http://www.siao2.com/2008/03/18/8306597.aspx

  • `wcout`相当于`wprintf`就像`cout`相当于`printf`--最后两个不会做Unicode. (2认同)

e.J*_*mes 5

你试过用过wcout吗?它类似于cout,但它接受"宽"字符,这应该允许正确的unicode编码.

条有关本地化,和另一个,无论是从MSDN可能是使用的.

  • 除非我完全弄错,否则unicode将成为西里尔文的必需品.常规的8位ASCII没有西里尔字母表中大多数字符的字形.您的示例(`╧ЁштхЄ`)的控制台输出由一些奇特的8位ASCII字符组成,因为该编码中没有正确的字符. (2认同)
  • 嗯.. Windows西里尔语是1251(Windows-1251)代码页.但DOS西里尔语使用866代码页.所以,"Привет!" 在CP1251 ="╧ЁштхЄ!" 在CP866中.这就是发生的事情,我在C++中用cp1251编写,但是控制台将它显示为cp866. (2认同)