名前 題名 ▼ Mr.XRAYさん > 文字列関係の記事を書いたので,結合文字判定のテストをしてみました. > かなり前のやりかけなのですが,3 つ目の文字である結合文字の判定ができません. > 当然 (?) MECSUtils を使用してます (自分で処理を書くなんてとんでも,です) > 検査対象の文字の後ろの文字も検査する必要があるようですね. > 結合文字に使用可能なコードポイントっていうのをこれから調べるところです. > > ちょっとした報告でございます. > でも,もし,情報があったら教えてくださいね. > > 以下のリンクは結合文字を判定する時の先頭のコードポイントのリストです. > この u ($0075 - 単なるアルファベツトの u) は当然以下のリストにはないわけです. > > http://www.fileformat.info/info/unicode/category/Mn/list.htm > http://www.fileformat.info/info/unicode/category/Mc/list.htm > http://www.fileformat.info/info/unicode/category/Me/list.htm > > 結合文字の判定用の関数 > https://ht-deko.com/tech021.html#MecsCombiningType > > > //============================================================================= > // フォーム生成時の処理 > // テスト用の文字列をセット > //============================================================================= > procedure TForm1.FormCreate(Sender: TObject); > begin > // $0075 は単なるアルファベットの u > Edit1.Text := #$01D6#$00FC#$0304#$0075#$0308#$0304 + 'ABC'; > end; > > //============================================================================= > // 結合文字の判定テスト > // このコードの実行には uses に MECSUtils が必要 > //============================================================================= > procedure TForm1.Button1Click(Sender: TObject); > var > LString : UnicodeString; > LUCS4Char : UCS4Char; > LInteger : Integer; > begin > LString := Edit1.Text; > > Memo1.Lines.Clear; > > for LInteger := 1 to Length(LString) do begin > LUCS4Char := Ord(LString[LInteger]); > if MECSUtils.MecsCombiningType(LUCS4Char) = ctBase then begin > // ここに追加の処理が必要 > Memo1.Lines.Add('ctBase'); > end else begin > Memo1.Lines.Add('ctCombining'); > end; > end; > end; > GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link