掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
UTF16->SJIS (ID:63636)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
UTF16で書かれたXMLファイルをSJISに変換したいのですが、うまくいかないので質問させて頂きます。 char * Utf16toSjis(char * data,int len){ int res,size char * buf; //UTF-16からSJISに変換した時の領域取得 res = WideCharToMultiByte(CP_ACP , 0,(const wchar_t *)data, len, NULL, 0, NULL, NULL); if(res==0){ printf("エラー"); return 0; } buf = (char *)malloc(sizeof(char)*res); if(buf==NULL){ printf("メモリ割り当てエラー"); return 0; } ZeroMemory(buf,res); //UTF-16からSJISに size = WideCharToMultiByte(CP_ACP , 0, (const wchar_t *)data, len, buf, res, NULL, NULL); if(size==0){ printf("エラー"); return 0; } return buf; } このようなコードを書いてみたのですが、SJISに変換されるのですが ファイルの最後に0が多くついてしまい正しく変換されていません。 WideCharToMultiByteの第三引数で無理やりwchar_tにキャストしてるのが原因かと思い、 res2=MultiByteToWideChar(CP_ACP, 0, data, len, NULL,0); data2=(wchar_t *)malloc(sizeof(wchar_t)*res2); ZeroMemory(data2,sizeof(wchar_t)*res2); MultiByteToWideChar(CP_ACP, 0, data, len, data2, res2); のコードを足して見た結果、SJISに変換されず、UTF16のまま、しかも文字化け。 恐らく使い方を間違ってるのだと思います。 また、MultiByteToWideChar,WideCharToMultiByteともに第四引数に-1を付けると自動でサイズを取得すると書いてあったのですが、 1が返ってきてしまい上手く取得できません。 どなたかUTF16からSJISへの変換の仕方を教えて頂けないでしょうか
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.