名前 題名 ▼ Mr.XRAYさん > Delphi 使いの方への参考です. > > ウェブページに掲載している文字コード表は, > 以下のようなコードを作成して使用しています. > このコードで保存した MojiTable.html をダブルクリックしてブラウザで表示 すると, > とりあえずは,文字コード表を表示できます. > CSS で体裁を整えます. > > > unit Unit1; > > interface > > uses > Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, > Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls; > > type > TForm1 = class(TForm) > Button1: TButton; > Memo1: TMemo; > procedure Button1Click(Sender: TObject); > private > { Private 宣言 } > public > { Public 宣言 } > end; > > var > Form1: TForm1; > > implementation > > uses > MECSUtils; > > > {$R *.dfm} > > //============================================================================= > // 区点コードの漢字表の HTML コード作成 > // これは JIS X 0212 の補助漢字の 16 区の漢字の例 > // EUC-JP 使用 > // ネット上で見かけるの EUC の値とは違うので注意 > // 本サンプルの EUC は,Windows の EUC-JP (コードページ 20932 ) における値 > // 全ての区点の区で EUC-JP の値が連続しているわけではない > // > // EUC-JP のコードポイントが 2 バイトと仮定した処理 > // Shift_JIS のコード表作成にも応用可能 > // Unicode の 16 進 4 桁 ( 2 バイト), 5 桁 (サロゲートペア) にも応用可能 > // > // uses に MECSUtils;が必要 > //============================================================================= > procedure TForm1.Button1Click(Sender: TObject); > const > // Shift_JIS, Unicode の時は各々 16, 16 の倍数 > LColCnt : Integer = 10; > LRowCnt : Integer = 10; > type > EUCString = type AnsiString(20932); // EUC-JP > var > LMojiBytes : TMemoryStream; > LMojiCodeList : TStringList; > LHtmlCodeList : TStringList; > LKuNo : Integer; > LFirstCode : Integer; > LFinalCode : Integer; > LBytes : array[0..3] of Byte; > LRow : Integer; > LCol : Integer; > LCode : Integer; > Lucs4Text : UCS4String; > LText : string; > LIndex : Integer; > begin > LKuNo := 16; > LFirstCode := $B020; > LFinalCode := LFirstCode + 99; > > LMojiBytes := TMemoryStream.Create; > LHtmlCodeList := TStringList.Create; > LMojiCodeList := TStringList.Create; > try > // 対象の文字のバイトデータを全て改行付きでメモリに格納 > for LIndex := LFirstCode to LFinalCode do begin > LBytes[0] := (LIndex and $FF00) shr 8; > LBytes[1] := (LIndex and $00FF); > LBytes[2] := $0D; > LBytes[3] := $0A; > LMojiBytes.Write(LBytes[0], Length(LBytes)); > end; > > // メモリに格納したバイトデータを TStingList に読み込む > LMojiBytes.Position := 0; > LMojiCodeList.LoadFromStream(LMojiBytes, TEncoding.GetEncoding(20932)); > > > // タイトル行 > LHtmlCodeList.Add(' <br>'); > LHtmlCodeList.Add(' <table>'); > LHtmlCodeList.Add(' <tbody>'); > LHtmlCodeList.Add(' <tr>'); > LHtmlCodeList.Add('<td width="30">' + '区' + '</td>'); > LHtmlCodeList.Add('<td width="30">' + '点' + '</td>'); > > for LCol := 0 to LColCnt - 1 do begin > LText := IntToHex(LCol, 1); > LHtmlCodeList.Add('<td width="30">' + LText + '</td>'); > end; > LHtmlCodeList.Add(' </tr>'); > > > // 行単位じ各 tr タグと td タグのコードを生成 > LIndex := 0; > for LRow := 0 to LColCnt - 1 do begin > if LIndex > (LColCnt * LRowCnt) then Break; > > LHtmlCodeList.Add(' <tr>'); > if LRow = 0 then begin > // Shfit_JIS, Unicdoe などのコード表作成の場合は不要 > LHtmlCodeList.Add('<td rowspan="10" valign="top" width="30">' + IntToStr(LKuNo) + '</td>'); > end; > > for LCol := 0 to LColCnt do begin > if LCol = 0 then begin > // 点の 10 進数で最初の値 (表の左から 2 番目の列) > // Shift_JIS, Unicode の時はここを変更 > LText := FormatFloat('0#', LRow * LColCnt); > LHtmlCodeList.Add('<td width="30">' + LText +'</td>'); > end else begin > // 各文字の文字参照の値 > // Unicode の 5 桁のコードポイントも処理可能なように UTF-32 に変換 > // サロゲートペアだと HTML の文字参照で正常表示できない文字がある > LText := LMojiCodeList[LIndex]; > Lucs4Text := MECSUtils.UTF16ToUTF32(LText); > LCode := Lucs4Text[0]; > if (LCode = $30FB) or (LCode > LFinalCode) then begin > LText := ''; > end else begin > LText := '&#x' + IntToHex(LCode, 4) + ';'; > end; > LHtmlCodeList.Add('<td width="30">' + LText +'</td>'); > > Inc(LIndex); > end; > end; > LHtmlCodeList.Add(' </tr>'); > end; > > LHtmlCodeList.Add(' </tbody>'); > LHtmlCodeList.Add(' </table>'); > > LHtmlCodeList.SaveToFile('MojiTable.html', TEncoding.UTF8); > finally > FreeAndNil(LHtmlCodeList); > FreeAndNil(LMojiCodeList); > FreeAndNil(LMojiBytes); > end; > end; > > end. GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link