Windows(Shift_JIS/マルチバイト環境)で文字コードをUTF-8に変換する方法です。
マルチバイトとUTF-8の変換APIは用意されていないのできっと面倒な事になるんだろうな・・・と予想していたのですが、一旦ワイド文字に変換すれば良いだけでしたね。
今iPhoneアプリを開発中なのですが、Windows環境とも通信するためUTF-8でやることにしましたが、Shift_JISのダメ文字(「表」とか)を気にしなくていいのでUTF-8楽です。
1 : 2 : //UTF8に変換する 3 : void shiftJisToUTF8( char* converted 4 : ,size_t converted_length 5 : ,const char* ascii ) 6 : { 7 : 8 : size_t sizeBuffer = strlen(ascii) *6; 9 : LPWSTR pwszBuf = new wchar_t[sizeBuffer]; 10 : 11 : MultiByteToWideChar( 12 : CP_ACP, 13 : 0, 14 : ascii, 15 : -1, 16 : pwszBuf, 17 : (int)sizeBuffer); 18 : 19 : 20 : WideCharToMultiByte( 21 : CP_UTF8, 22 : 0, 23 : pwszBuf, 24 : -1, 25 : converted, 26 : (int)converted_length, 27 : NULL, 28 : NULL); 29 : 30 : delete[] pwszBuf; 31 : return; 32 : } 33 : 34 : //ShiftJisに変換する 35 : void UTF8ToShiftJIS( char* converted 36 : ,size_t converted_length 37 : ,const char* ascii ) 38 : { 39 : 40 : size_t sizeBuffer = strlen(ascii) *6; 41 : LPWSTR pwszBuf = new wchar_t[sizeBuffer]; 42 : 43 : MultiByteToWideChar( 44 : CP_UTF8, 45 : 0, 46 : ascii, 47 : -1, 48 : pwszBuf, 49 : (int)sizeBuffer); 50 : 51 : 52 : WideCharToMultiByte( 53 : CP_ACP, 54 : 0, 55 : pwszBuf, 56 : -1, 57 : converted, 58 : (int)converted_length, 59 : NULL, 60 : NULL); 61 : 62 : delete[] pwszBuf; 63 : 64 : return; 65 : }