2008-08-03

ログ出力(続き)

先日のログ出力の件、WideCharToMultiByte()に CP_UTF8を指定することでうまくいきました。
tmytさん、情報ありがとうございました。
ZeroMemory(szWBuf, sizeof(szWBuf));
ZeroMemory(szMbBuf, sizeof(szMbBuf));
wsprintf(szWBuf, KML_DATA, data[i].dblLongitude, data[i].dblLatitude);
//dwLen = wcstombs(NULL, szWBuf, 0);
//wcstombs(szMbBuf, szWBuf, dwLen);
dwLen = WideCharToMultiByte(CP_UTF8, 0, szWBuf, -1, szMbBuf, sizeof(szMbBuf), NULL, NULL);
WriteFile(hKMLFile, szMbBuf, dwLen - 1, NULL, NULL);

 
ただ、WideCharToMultiByte()の仕様なのか 出力文字列にANK文字(?)が含まれていないとCP_UTF8を指定してもシフトJISで出力されるようです。
今回はコメントに日本語を含めることで無事にUTF-8になりました。
 
また、WideCharToMultiByte()は変換したバイト数を返しますが これには終端ヌル文字も含まれているので WriteFile()に渡すときは -1しましょう。
未だにこんな事に引っ掛かるのは私だけかもしれませんが、Google Earthですら読み込んでくれなくなって しばらく悩みました。
 
ともあれ無事にGoogle Earth、Googleマップで読み込めるようになりました。
 
今のところ GPSを使えば それっぽい線が描かれているのですが、W-SIMだとあまり綺麗な線にならないので もう少し見せ方を考える必要がありそうです。  

0 件のコメント: