0
私はBMP範囲外のUnicodeをテストしようとしています。以下では、例の文字として+ UD834DF01を使用し、それをマルチバイト文字に変換しようとしましたが、プログラムは失敗し、「Illegal byte sequence」と表示されます。なぜですか?wctomb失敗:不正なバイトシーケンス
#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;
}
gccはUnicodeコードポイントを表すのにwchar_tを使用していますか? – noinput
私はlibiconvを試しましたが、私の結果はU + 01D301とUTF-8です。0xf0 0x9d 0x8c 0x81 – noinput
@noinput:ワイド文字/文字列のサポートはコンパイラではなくCライブラリです。glibcは現代のUnicodeすなわちUCS- 4。あなたは1D301について正しいです、編集を参照してください。 –