【发布时间】:2015-03-05 14:49:06
【问题描述】:
我有一个uint32_t 数组。每个都是代表 Unicode 字符的值。我想像字符串一样打印数组,但我无法让它工作。
我尝试了很多不同的东西
typedef struct String {
uint32_t *characters;
unsigned long length;
} WRString;
char* WRStringToString(WRString *wstr){
char *string = malloc(sizeof(char) * wstr->length * 4);
int i = 0;
int j = 0;
for (; i < wstr->length; i++) {
string[j++] = wstr->characters[i];
char byte2 = (char)wstr->characters[i] >> 8;
if (byte2) {
string[j++] = byte2;
char byte3 = (char)wstr->characters[i] >> 16;
if (byte3) {
string[j++] = byte3;
char byte4 = (char)wstr->characters[i] >> 24;
if (byte4) {
string[j++] = byte4;
}
}
}
}
return string;
}
永远在一起
WRString *string; //Characters are 0xD6, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x69, 0x63, 0x68
我试过了:
setlocale(LC_CTYPE,"de_DE.UTF-8");
puts(WRStringToString(string));
给\326\377\377\377sterreich。
wprintf(L"%s",WRStringToString(string));
只要没有设置本地,就给出相同的结果。
Printing UTF-8 strings with printf - wide vs. multibyte string literals 和 Printing Unicode Character (stored in variables) in C 并没有真正帮助我。
有什么建议吗?
【问题讨论】:
-
那些不是字符串中的 UTF-8 字符,或者您可以直接打印它们。它们是 Unicode 代码点。请保持您的术语直截了当。
-
@MarkRansom,不,他的
uint32_t中似乎只有utf8字节编码 -
问题中有很多术语问题,不清楚您在问什么。我不知道这只是语言问题,还是对 UTF-8、字符等 Unicode 概念有误解。
-
@JensGustedt 不,他的示例中的第一个字符是 0xD6,它是
Ö的代码点。我怀疑这是一个合法的 UTF-8 序列。 -
@MarkRansom,好的,是的,所以他真的很困惑。