Je suis en train de tester Unicode hors de portée BMP. Ci-dessous, j'utilise + UD834DF01 comme caractère d'exemple et essaye de le convertir en un caractère multi-octets, mais le programme a échoué et dit 'séquence d'octets illégaux', pourquoi?wctomb échouent: séquence d'octets illégale
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
#include <stdlib.h>
#include <limits.h>
int main(int argc, const char *argv[])
{
setlocale(LC_ALL, ""); // my locale is UTF-8
wchar_t wc = 0xd834df01;
char bytes[MB_LEN_MAX] = {0};
int r = wctomb(bytes, wc);
if (r > 0) {
for (int i = 0; i < MB_LEN_MAX; i++)
printf("0x%x\n", bytes[i]);
} else {
perror("fail");
}
return 0;
}
Est-ce que cela veut dire que gcc utilise wchar_t pour représenter un codepoint Unicode? – noinput
J'ai essayé libiconv, mais mon résultat est U + 01D301 et UTF-8 comme 0xf0 0x9d 0x8c 0x81 – noinput
@noinput: le support large-char/string est la plupart du temps votre bibliothèque C plutôt que votre compilateur et la glibc moderne Unicode UCS- 4. Vous avez raison sur 1D301, voir modifier. –