WideCharToMultByte APIとMultiByteToWideChar APIはその第一引数のコードページを変えることで様々な文字コードとWideStringとの相互変換ができます。
function gfnsJisToWide(sSrc : AnsiString) :
WideString;
var
li_Len : Integer;
lp_Buff : PWideChar;
begin
li_Len := MultiByteToWideChar(CP_JIS, 0, PAnsiChar(sSrc),
-1, nil, 0);
lp_Buff := AllocMem((li_Len + 1) * 2);
try
MultiByteToWideChar(CP_JIS, 0, PAnsiChar(sSrc), -1, lp_Buff,
li_Len);
Result :=
WideString(lp_Buff);
finally
FreeMem(lp_Buff);
end;
end;
function gfnsWideToJis(sSrc :
WideString) : AnsiString;
var
li_Src : Integer;
li_Len : Integer;
lp_Buff : PAnsiChar;
begin
//http://www.gesource.jp/weblog/?p=738
//http://ht-deko.minim.ne.jp/ft0909.html#090927
li_Src := Length(sSrc);
li_Len := (li_Src * 5) + 4 - (li_Src
div 2);
lp_Buff := AllocMem(li_Len +1);
try
WideCharToMultiByte(CP_JIS, 0, PWideChar(sSrc), -1, lp_Buff,
li_Len +1, nil, nil);
Result := AnsiString(lp_Buff);
finally
FreeMem(lp_Buff);
end;
end;
参考サイトにあるようにWindows 2000でWideCharToMultiByte APIを使ってWideStringをJISへセオリー通りに変換すると文字数が足りなくなるそうです。
ということで本来ならOSのバージョンを調べて処理を振り分けるのが良いのでしょうが簡易に済ませています。