WindowsでSJISベースで汲まれた文字表示ルーチンをiOS/Androidで動作させるときに毎度変換が必要になるため、Windowsに依存しない変換方法をメモ。
test.cpp(SJISで記述)
#include <locale.h> void TestProg() { char *mbstbl = { "あ" //82a0 SJIS }; wchar_t wcstbl[32] = { L"あ", //4230 UTF-8 }; setlocale(LC_ALL, "JPN"); //utf-8 -> sjis char tblm[32] = {0}; size_t ret = wcstombs( tblm, wcstbl, 32); //tblm = 82a0 ->sjis //sjis ->utf16 wchar_t tblm2[32] = { 0 }; ret = mbstowcs(tblm2, tblm, 32); //4230 sjis ->utf16 tblm2[0] = 0x00; ret = mbstowcs(tblm2, mbstbl, 32); //4230 sjis ->utf16 ret = wcstombs(tblm, tblm2, 32); //8xa0 utf16 -> sjis }
mbstowcs / wcstombsは事前にどこの地域であるかを設定するsetlocaleをしておかないと変換に失敗するので注意。
setlocale(LC_ALL, "JPN"); //←日本に設定
LC_ALLは地域設定に含まれる、言語や時間などを全部変更する。
言語だけならLANG、時間ならLC_TIMEなどで個別の指定も可能。