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 : }