0

cJSON ライブラリを使用して json ファイルに値を格納するために、ワイド char に格納されている日本語の文字を UTF-8 に変換しようとしています。最初に使用してみwcstombs_sましたが、明らかにこれは日本語の文字をサポートしていません:

size_t len = wcslen(japanese[i].name) + 1;
char* japanese_char = malloc(len);
if (japanese_char == NULL) {
    exit(EXIT_FAILURE);
}
size_t sz;
wcstombs_s(&sz, japanese_char, len, japanese[i].name, _TRUNCATE);

次に、他の回答に基づいて、json UTF-8 からワイド char への変換が成功した場合に、次のように反対の関数を試しましたが、宛先バッファーdestにはガベージ文字のみが含まれています。

size_t wcsChars = wcslen(japanese[i].name);
size_t sizeRequired = WideCharToMultiByte(CP_UTF8, 0, japanese[i].name, wcsChars, NULL, 0, NULL, NULL);
char* dest = calloc(sizeRequired, 1);
WideCharToMultiByte(CP_UTF8, 0, japanese[i].name, wcsChars, dest, sizeRequired, NULL, NULL);
free(dest);

wchar_t変換しようとしているワイド char ( ) は(a in a struct) にササササササササササササササササ格納されています。目的は、cJSON を使用して値を UTF-8 でエンコードされた json ファイルに保存することです。japanese[i].namewchar_t*cJSON_CreateString

質問: C (C++ ではない) で日本語を wchar_t から UTF-8 char に変換する適切な方法は何ですか?

4

1 に答える 1