按代码打印 Unicode 字符
Print Unicode characters by code
我有一个 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));
给出 6777sterreich
.
wprintf(L"%s",WRStringToString(string));
只要不设置本地,都一样。
Printing UTF-8 strings with printf - wide vs. multibyte string literals and Printing Unicode Character (stored in variables) in C对我帮助不大
有什么建议吗?
这些似乎只是 unicode 代码点。将它们一个接一个地存储在 wchar_t
字符串中,然后用
打印
printf("%ls\n", wstring);
您必须在程序开始时将语言环境设置为系统默认值:
set_locale(LC_ALL, "");
Jens Gustedt 的回答指出了正确的方向,但我继续使用 uint32_t
,因为我需要支持 Unicode 的表情符号,而 wchar_t
对这些来说可能太小了。 (如雷米勒博所说)
这似乎工作得很好:
setlocale(LC_CTYPE,"de_DE.UTF-8");
printf("%ls\n", string->characters);
我有一个 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));
给出 6777sterreich
.
wprintf(L"%s",WRStringToString(string));
只要不设置本地,都一样。
Printing UTF-8 strings with printf - wide vs. multibyte string literals and Printing Unicode Character (stored in variables) in C对我帮助不大
有什么建议吗?
这些似乎只是 unicode 代码点。将它们一个接一个地存储在 wchar_t
字符串中,然后用
printf("%ls\n", wstring);
您必须在程序开始时将语言环境设置为系统默认值:
set_locale(LC_ALL, "");
Jens Gustedt 的回答指出了正确的方向,但我继续使用 uint32_t
,因为我需要支持 Unicode 的表情符号,而 wchar_t
对这些来说可能太小了。 (如雷米勒博所说)
这似乎工作得很好:
setlocale(LC_CTYPE,"de_DE.UTF-8");
printf("%ls\n", string->characters);