C-打印一个用Unicode符号填充的数组

时间:2018-11-23 00:24:13

标签: c arrays unicode char printf

我想打印一个数组(/字符串),其中填充了unicode(和普通)符号,例如正方形。

这是我的代码:

Function TxtJoin(delim As String, ignoreEmpty As Boolean, rg As Range) As String
    Dim c As Range
    For Each c In rg
        If Not ignoreEmpty Or Not IsEmpty(c) Then TxtJoin = TxtJoin & delim & c
    Next c
    If TxtJoin <> "" Then TxtJoin = Mid(TxtJoin, Len(delim) + 1)
End Function

它仅打印“ííííA◊”。 为什么不打印正方形以及如何修复?

根据fileformat.info,正方形的

C / C ++ / Java源代码为“ \ u25A0”

我也尝试过广场的

UTF-8(十六进制),即“ 0xE2 0x96 0xA0(e296a0)”

都不行。

1 个答案:

答案 0 :(得分:2)

array[i] = '\u25A1'在C语言中无法正确编译。您至少应该得到一个编译器警告。

'\u25A1'的类型为char16_t(每个字符两个字节),在这里与之无关。

\u可以用作字符串文字中的escape sequence,以表示0x10000下面的Unicode代码点。示例:

strcpy(array, u8"\u25A0");
printf(array);
Output: ■

请注意,根据UTF8转换,u8"\u25A0"被存储为4个字节(0xE2, 0x96, 0xA0 +空字符)。也可以按以下方式打印(如果控制台支持UTF8输出):

strcpy(array, "\xE2\x96\xA0");
printf(array);
Output: ■

此外,字符串应以空字符结尾,字符串中的最后一个字符应为零。

要以字节存储UTF8,可以按以下方式分配值:

array[0] = 0xE2;
array[1] = 0x96;
array[2] = 0xA0;
array[3] = '\0';

如果您的开发环境支持,您也可以声明

char array[] = u8"■";