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].name
wchar_t*
cJSON_CreateString
質問: C (C++ ではない) で日本語を wchar_t から UTF-8 char に変換する適切な方法は何ですか?