如何在输出到终端时将任意数字解释为Unicode? p>
例如:
#include <iostream>
int main() {
int euro_dec = 0x20AC;
std::cout << "from int: " << euro_dec
<< "\nfrom \\u: \u20AC" << std::endl;
return 0;
}
打印:
from int: 8364
from \u: €
转义序列\u
如何将数字0x20AC
解释为Unicode? p>
我使用wcout
测试,输出为:
from int: 8364
from \u:
答案 0 :(得分:3)
程序文本中出现的unicode转义序列在转换的第一阶段(2.2p1b1 [lex.phases] )转换为等效的Unicode字符。甚至在程序被标记化或预处理之前就会发生这种情况。
要将表示为整数的Unicode代码点转换为本机窄多字节编码,请使用c32rtomb
:
#include <cuchar>
char buf[MB_CUR_MAX];
std::mbstate_t ps{};
std::size_t ret = std::c32rtomb(buf, euro_dec, &ps);
if (ret != static_cast<std::size_t>(-1)) {
std::cout << std::string(buf, &buf[ret]); // outputs €
}
请注意cuchar
支持不足;如果您知道您的原生窄字符串编码是UTF-8,则可以使用codecvt_utf8<char32_t>
,否则您将不得不使用特定于平台的工具。
答案 1 :(得分:0)
当你输出整数变量时,库会将值转换为文本,它实际上不会将值作为整数输出。
使用"\u"
时,编译器读取数字并将其转换为适当的字节序列,直接插入文字字符串。