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にデコードされた文字列が表示されます。