首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在C++中打印Unicode字符?

如何在C++中打印Unicode字符?
EN

Stack Overflow用户
提问于 2012-08-18 11:23:29
回答 11查看 187.3K关注 0票数 72

我正在尝试打印一个十进制1092代码的俄语"ф“(西里尔文小写字母EF)字符。使用C++,我如何打印出这个字符?我本以为下面的内容会起作用,但是……

代码语言:javascript
代码运行次数:0
运行
复制
int main (){
   wchar_t f = '1060';
   cout << f << endl;
}
EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2012-08-18 12:42:53

要表示字符,可以使用通用字符名称( Universal character Names,UCNs)。字符'ф‘的Unicode值为U+0444,因此在C++中可以写为'\u0444’或'\U00000444‘。此外,如果源代码编码支持此字符,那么您可以直接将其写入源代码中。

代码语言:javascript
代码运行次数:0
运行
复制
// both of these assume that the character can be represented with
// a single char in the execution encoding
char b = '\u0444';
char a = 'ф'; // this line additionally assumes that the source character encoding supports this character

打印这些字符取决于您要打印的内容。如果要打印到Unix终端仿真器,终端仿真器正在使用支持此字符的编码,并且该编码与编译器的执行编码匹配,则可以执行以下操作:

代码语言:javascript
代码运行次数:0
运行
复制
#include <iostream>

int main() {
    std::cout << "Hello, ф or \u0444!\n";
}

此程序不要求'ф‘可以在单个字符中表示。在OS和大多数现代Linux安装上,这都可以很好地工作,因为源代码、执行和控制台编码都是UTF-8 (支持所有Unicode字符)。

Windows的情况比较困难,不同的权衡有不同的可能性。

如果您不需要可移植代码(您将使用wchar_t,这在所有其他平台上都应该避免),那么最好的方法可能是将输出文件句柄的模式设置为只接受UTF16数据。

代码语言:javascript
代码运行次数:0
运行
复制
#include <iostream>
#include <io.h>
#include <fcntl.h>

int main() {
    _setmode(_fileno(stdout), _O_U16TEXT);
    std::wcout << L"Hello, \u0444!\n";
}

可移植的代码更加困难。

票数 70
EN

Stack Overflow用户

发布于 2012-08-19 00:19:29

在使用-std=c++11进行编译时,可以简单地

代码语言:javascript
代码运行次数:0
运行
复制
  const char *s  = u8"\u0444";
  cout << s << endl;
票数 17
EN

Stack Overflow用户

发布于 2012-08-18 11:26:50

归根结底,这完全依赖于平台。不幸的是,在标准C++中对Unicode的支持非常差。对于GCC来说,你必须使它成为一个窄字符串,因为他们使用UTF-8,而Windows想要一个宽字符串,并且你必须输出到wcout

代码语言:javascript
代码运行次数:0
运行
复制
// GCC
std::cout << "ф";
// Windoze
wcout << L"ф";
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12015571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档