最近は漢字のエンコードもSJISやEUCだけでなくてUTF-8もできないといけないぽい。UTF-8を選択しなければ行けない場合には「英数字のみ!」と逃げ続けていたけれども、どうもやっぱり対応しておかないといけなくなっちゃったので、windows限定だけどC言語で変換の関数を作成。
#include <windows.h> unsigned char *sjtoutf(unsigned char *dst,int dstlen,unsigned char *src) { WCHAR *pwchr; int length,wclen; length=MultiByteToWideChar(932,0,src,-1,NULL,0); pwchr=alloca(sizeof(WCHAR)*length); if(pwchr==NULL){ dst[0]=0; }else{ wclen=MultiByteToWideChar(932,0,src,-1,pwchr,length); WideCharToMultiByte(CP_UTF8,0,pwchr,wclen,dst,dstlen,NULL,NULL); } return(dst); }
srcにソースのシフトJISの文字列 dstに変換後のUTF-8の文字列 dstlenに変換後の文字列のバッファサイズ 返り値はdstと同じ。
932を直接数字で書かないといけないところがアレだけれど、どうもWatcomCでは別の定義が無いぽいのでしかたない。 今見てみるとallocaを使ってるのがちょっぴり気になるけど、普通にツールとかだとallocaが無いことは無いだろうからいいかな。WindowsのAPIを使わない、きちんとした変換は結構めんどくささそうな感じ・・・ | |