C++ 在C中打印unicode文本

C++ 在C中打印unicode文本,c++,c,unicode,encoding,unicode-literals,C++,C,Unicode,Encoding,Unicode Literals,我正在为Raspberry Pi制作一个OpenVG应用程序,它显示一些文本,我需要对外来字符的支持(本例中为波兰语)。我计划编写一个函数,将unicode字符映射到某些更高级语言中的C文本,但目前在C中打印这些文本时存在问题 鉴于以下代码: //both output the "ó" character, as expected char A[] = "\xF3"; wchar_t B[] = L"\xF3"; //"ś" is expected as output but

我正在为Raspberry Pi制作一个OpenVG应用程序,它显示一些文本,我需要对外来字符的支持(本例中为波兰语)。我计划编写一个函数,将unicode字符映射到某些更高级语言中的C文本,但目前在C中打印这些文本时存在问题

鉴于以下代码:

//both output the "ó" character, as expected 
char     A[] =  "\xF3"; 
wchar_t  B[] = L"\xF3"; 

//"ś" is expected as output but instead I get character with code 0x5B - "[" 
char     A[] =  "\x15B"; 
wchar_t  B[] = L"\x15B"; 
大多数波兰字符都有3位十六进制代码。当我试图打印“ś”(0x15B)时,它会打印字符“[”(0x5B)。结果是,我无法打印任何超过2位代码的unicode字符

使用数据类型是原因吗?我考虑过使用char16\u t和char32\u t,但在系统中找不到头文件。

这就是原因所在

char A[]={'\xc5','\x9b'};

c59b是UTF-8的“ś”(0x15B)。

如果到目前为止所有字符字符串都正确打印,它不会因为您这样认为而切换到UTF16/32。也许它可以与UTF8一起工作,但您的值(和分配代码)是错误的这可能与几乎所有平台上的普通字符都是单字节有关,因此字符
'\x15b'
不能在字符串中表示。它不仅仅是一个前导
0
,而是
\u
而不是
\x
。而不是说“当我试图打印时”,发布进行打印的代码。问题可能完全出在您的程序之外。打印时,您只需将数据发送到stdout。然后会发生什么?打印在哪里?shell(或调用应用程序,无论是什么)使用哪个字符集假设?它使用哪种字体,以及该字体中定义了哪些Unicode代码点?如果您想知道程序是否输出预期数据,请将其写入文件。然后在适当的编辑器中打开该文件并检查其内容。计算错误:C59A为0x15A。