DEKO様、解決プランとサンプルコードをありがとうございました。
このサンプルをつかって解決方法を模索しました。
$E1CCの置換は、やはりDEKO様の指摘通り他の機種依存文字が全部"たちざき"となってしまうことを考えると他に方法がないかを考えました。
DecodeBASE64からEnc.GetStringの間に、SJISに変換して"たちざき"のSJISのコードである#FAB1の文字の位置を保存して
それを使って、UNICONDEに変換後の文字で置換すれば解決でき予感がしたので、コードにしようと思ったのですが
どうやって、SJISにすればいいか分かりませんでした(涙)
MIMEの変換などでググったところ、PzConvへ辿りつきました。
内部がAnsiString化してあるとのコメントがあったので、CharをAnsiCharへ書き換えをして。XEでコンパイルできたので
さっそく
var
AnsiBuf: AnsiString;
begin
AnsiBuf := PzConv.MIMEHeaderDecode( '=?iso-2022-jp?B?GyRCOzN5dTlieXU1XHl1GyhC?=' );
Edit2.Text := AnsiToUTF16( AnsiBuf );
end;
として、とりあえず、コード変換後を確認して、Posとか組もうとおもっていたら
なぜか、Edit2に"たちざき"が表示されました。??
双方の違いを見ると、結局BASE64のデコード後にjis2sjisがあるかないかだったんですが
果たして結果オーライなのか、
試しに
for i := 0 to Length(Edit2.Text) do begin
Memo1.Lines.Add( IntToHex(Ord(Edit2.Text[i]),2) );
end;
こんなことをして、本当にUNICODEで表示されているの確認したら、UNICODEでした。
この検証を踏まえた結果から考察すると、MECSUtilsを使ってサンプルを変更して
AAnsiBuf: ByteString;
DAnsiBuf: ByteString;
Buf := DecodeBASE64(sBASE64);
AAnsiBuf := MecsAnsiStringOf( BUF );
ConvertString( 50220,932,AAnsiBuf,DAnsiBuf);
Edit2.Text := AnsiToUTF16( DAnsiBuf );
これで、求めていた結果になるのですが、この方法は正しいのでしょうか?
ただし、iso-2022-jpの場合限定だと思いますが。
アイテムたくさん☆freemlのプロフィール画像をアバターに♪
http://ad.freeml.com/cgi-bin/sa.cgi?id=jAIkp
------------------------------------------------------[freeml byGMO]--