我想打印一个数组(/字符串),其中填充了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)”
都不行。
答案 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"■";