Quoted-printableとBase64エンコード,デコードと文字コード変換 ~Delphiでお手軽プログラミング
DelphiでQuoted-printableおよびBase64エンコード、デコードを行います。
また以下文字コードも指定できるようにします。
UTF-16LE(CP1200)、UTF-8、Shift-JIS、iso-2022-jp(JIS)、EUC-JP
画面設計
Delphi IDEを起動し、「ファイル」⇒「Windows VCLアプリケーション -Delphi」をクリックします。
フォームにTMemo×2個、TButton×1個、TRadioGroup×3個をドラッグ&ドロップします。
ソースコードの記述
フォーム(Form1)の何もないところをダブルクリックして、以下のソースコードを記述します。
またButton1をダブルクリックして以下ソースコードを記述します。
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls, Vcl.ExtCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
Button1: TButton;
RadioGroup1: TRadioGroup;
RadioGroup2: TRadioGroup;
RadioGroup3: TRadioGroup;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
//コードーページ UTF-16LE UTF-8, SJIS JIS EUC-JP
cp:Array[0..4] of Integer=(1200, 65001, 932, 50220, 20932);
implementation
{$R *.dfm}
uses System.NetEncoding, //TNetEncoding.Base64
IdCoderQuotedPrintable,IdGlobal;//Quoted-Printable
procedure TForm1.Button1Click(Sender: TObject);
var DecoderQp: TIdDecoderQuotedPrintable;
EncoderQp: TIdEncoderQuotedPrintable;
ibt:TIdBytes;
enc:TEncoding;
bt:TBytes;
st:String;
begin
//文字エンコード
enc:=TEncoding.GetEncoding(cp[RadioGroup3.ItemIndex]);
try
if RadioGroup1.ItemIndex=0 then
begin
//デコード
if RadioGroup2.ItemIndex=0 then //MIME(Base64)
begin
bt:=TNetEncoding.Base64.DecodeStringToBytes(Memo1.Lines.Text);
st:=enc.GetString(bt);
end
else if RadioGroup2.ItemIndex=1 then //Quoted-Printable
begin
DecoderQp:=TIdDecoderQuotedPrintable.Create();
try
ibt:=DecoderQp.DecodeBytes(Memo1.Lines.Text);
st:=enc.GetString(ibt);
finally
DecoderQp.Free;
end;
end;
end
else
begin
//エンコード
if RadioGroup2.ItemIndex=0 then //MIME(Base64)
begin
bt:=enc.GetBytes(Memo1.Lines.Text);
st:=TNetEncoding.Base64.EncodeBytesToString(bt);
end
else if RadioGroup2.ItemIndex=1 then //Quoted-Printable
begin
EncoderQp:=TIdEncoderQuotedPrintable.Create();
try
ibt:=TIdBytes(enc.GetBytes(Memo1.Lines.Text));
st:=EncoderQp.EncodeBytes(ibt);
finally
EncoderQp.Free;
end;
end;
end;
finally
enc.Free;
end;
Memo2.Lines.Text:=st;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
RadioGroup1.Caption:='デコードかエンコード';
RadioGroup1.Items.Add('デコード');
RadioGroup1.Items.Add('エンコード');
RadioGroup1.ItemIndex:=1;
RadioGroup2.Caption:='変換方式';
RadioGroup2.Items.Add('MIME(Base64)');
RadioGroup2.Items.Add('Quoted-Printable');
RadioGroup2.ItemIndex:=0;
RadioGroup3.Caption:='文字コード';
RadioGroup3.Items.Add('UTF-16LE');
RadioGroup3.Items.Add('UTF-8');
RadioGroup3.Items.Add('Shift-JIS');
RadioGroup3.Items.Add('ISO-2022-JP(JIS)');
RadioGroup3.Items.Add('EUC-JP');
RadioGroup3.ItemIndex:=1;
end;
end.
実行する
Memo1に任意の文字列を入れて「エンコード」「Quoted-Printable」「ISO-2022-JP」を選択して「Button1」ボタンを押すとMemo2にエンコードされた文字列が表示されます。
Memo1にエンコードされた文字列を入れて「デコード」を選択して「Button1」ボタンを押すとMemo2にデコードされた文字列が表示されます。
