UTF_16で取得しUTF_8で出力したい!!
こんにちは。
C言語初心者です。以前この件で質問させていただいたのですがエラーがとれず、もう一度質問してしまいました。
今回は、C言語でレジストリからデータをUTF_16で取得し、UTF_8で表示すると言うプログラミングを組みたいのですがどうしても下記のコードではエラーが出てしまいどうしていいかわかりません。
エラーの内容としては、16から8に変換する部分のutf8Sizeの部分で上手くいっていないようで、、、
どうしたらいいかわからないので、もし知っている方がいればよろしくお願いします。
#include<windows.h>
#include<stdio.h>
void QueryValue(void);
int main(void){
QueryValue();
return 0;
}
void QueryValue(void){
HKEY hkey;
DWORD ValueType;
DWORD ValueSize;
wchar_t Value[1000];
char *utf8String = 0; // UTF-8 文字列バッファへのポインタ
size_t utf8Size = 0; // UTF-8 文字列のバイト数 (終端 NUL 含む)
int result; // WideCharToMultiByte() の戻り値
/*レジストリキーのオープン*/
RegOpenKeyEx(
HKEY_LOCAL_MACHINE,
L"SOFTWARE\\Hitachi\\JP1/RemoteControlManager",
0,
KEY_ALL_ACCESS,
&hkey);
ValueSize = 1000;
/*レジストリ値の取得*/
RegQueryValueEx(
hkey,
L"ProgramName",
NULL,
&ValueType,
(LPBYTE)Value,
&ValueSize);
/*結果の表示(シフトJIS変換’%S’)*/
if(ValueType == REG_SZ) printf("%S\n",Value);
else printf("....can't read\n");
/*****************************************************/
//UTF_16からUTF_8変換を行う
result = WideCharToMultiByte(
CP_UTF8,
WC_NO_BEST_FIT_CHARS,
Value,
-1,
utf8String,
utf8Size,
NULL,
NULL);
if(result <= 0){
fprintf(stderr,"UTF_16→UTF_8変換エラー(%lu)\n",GetLastError());
}
/*結果の表示()*/
if(ValueType == REG_SZ) printf("%s\n",utf8String);
else printf("....can't read\n");
/*UTF_8文字列バッファを開放する*/
free(utf8String);
/************************************************/
/*終了*/
RegCloseKey(hkey);
}
お礼
回答ありがとうございます。 自分もこのサイトは見たのですが、使い方がいまいちわからなかいんです・・・。