Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2023年10月19日] [更新 2024年05月05日] Delphi 一般・その他 [未分類 - OS の操作等]
   
環境依存文字チェッカー
動作確認等 Windows 10 ビルド 19043 Pro 64 bit
Google Chrome 124, Microsoft Edge 124, Firefox 125
[整理番号 - 1912]







01_環境依存文字チェッカー


以前,環境依存文字についての記事を書きました.そこで,ウエブページ上で使用できる環環境依存文字のチェッカーを作成してみました.
環境依存文字は,以下の 2 番目のリンクに掲載しているツールでもチェック可能です.



使用方法は単純です.ボタンの下の入力欄に文字を入力して [チェック] ボタンをクリックします.環境依存文字は,文字の背景が赤になります.
コピーと貼り付けは,プレーンテキスト形式 (書式なしテキスト) になるようにしています.タブ文字はなくなります.この入力エリアではタブ文字は入力できません.

文字数は,改行文字を含まない文字数です.
改行は,[Shift] + [Enter] キー操作で挿入してください.



   


以下は,実際の実行例です.
チェック可能な文字数は 1 万字程度と思ってください.文字数が多いと,応答しなくなり,このページがフリーズすることがあります.






[備考 1]
Firefox は,バージョン 125 未満では正常に動作しません.

[備考 2]
Checker のように末尾が er の用語は,日本語で表記する場合,長音記号を使用しないで「チェッカ」とするのが一般的です.




02_同じ字形の環境依存文字


下表の [基底文字] は異体字セレクタを使用しない文字です.右の 3 つは異体字セレクタを使用している文字です.異体字セレクタを使用する文字は環境依存文字です.この表の異体字セレクタ付きの文字は,専用のフォントを使用しないとと正しく表示することはできません.
異体字セレクタを使用している文字であるかは,上の参考リンクのツールで確認できます.




基底文字
異体字セレクタ付きの文字
IPAmj明朝 Yu Gothic UI
朝󠄂 朝󠄃 朝󠄄 朝󠄂 朝󠄃 朝󠄄


上の異体字セレクタを使用する異体字は,専用のフォントを使用して描画しないと,環境依存文字の区別がつきません.

次の,~ 〜 ~ の内,2 番目と 3 番目の文字も,字形では環境依存文字との区別が付かない文字の例です.この文字は,全角チルダ / 波ダッシュ問題と言われている文字です.
いずれの文字も「から」を変換して入力できます.半角のチルダは,日本語 IME が OFF の状態で [Shift] + [^] ( [Back Space] [\] キーの左) のキー操作で入力できます.


文字 UCS 判定
~ U+007E チルダ (半角).非環境依存文字
U+301C 波ダッシュ (全角).環境依存文字
U+FF5E 全角チルダ.非環境依存文字


半角の円記号も,非環境依存文字と環境依存文字があります.日本語のフォントでは,半角のバックスラッシュは表示できません.これは,円記号問題と言われています.
全角の円記号とバックスラッシュはどちらも非環境依存文字です.


欧文フォント 日本語フォント UCS 備考
\ \ U+005C 半角.非環境依存文字
[¥] キーで入力.[\] キーで入力しても同じ
欧文フォントではバックスラッシュになる
¥ ¥ U+00A5 半角.環境依存文字
「えん」を変換して入力.[環境依存] の ¥ を選択
[¥] キーで入力すると,自動的に U+005C になる
U+FF3C 全角.非環境依存文字
「すらっしゅ」を変換して入力
U+FFE5 全角.非環境依存文字
「えん」を変換して入力.[全] の ¥ を選択


Unicdoe には,一般的な文字の他に,康煕部首と CJK 部首補助という領域 (ブロック) に,部首文字だけが登録されています.これらの文字は全て環境依存文字です.一般的な文字と字形が同じ,あるいは似ています.



康煕部首の文字 (環境依存文字) ⼥ ⽉ ⽏ ⽗ ⽜ ⾁ ⾧ ⾳ ⾼ ⾺
一般的な文字 (非環境依存文字) 女 月 毋 父 牛 肉 長 音 高 馬


[備考 1]
この項で説明した環境依存文字は,Windows 10 の Microsoft IME の再変換の機能を利用しても,非環境依存文字に変換することはできません.

[備考 2]
ucs は Universal Multiple-Octet Coded Character Set (国際符号化文字集合) の略です.これは,Unicode のコードポイントのことです.




03_環境依存文字チェックの処理手順
KankyoIzon_Checker_Sample.zip [361 KB] 2024年05月05日版
HTML ソースコード.encoding.js-master.zip 同梱.説明ファイルなし


今回作成した環環境依存文字チェッカーの処理手順の説明です.
このプログラムは javaScript を使用して作成しています.実際には,環境依存文字を検出するのではなく,環境に依存しない文字であるかを調べて,そうではない文字を環境依存文字としています.
文字コードの変換には encoding.js というライブラリを利用しています.



環境に依存しない文字は,ASCII 文字と JIS X 0208 の文字です.JIS X 0208 の文字は ISO-2022-JP として符号化されています.これは,元々,日本語のインターネットメール (電子メール) で使用する文字を制定するための文字符号化方式の規格です.この文字符号化方式による文字コードのことを JIS コードと言います.
本ツールは,この JIS コードを使用して JIS X 0208 の文字であるかを判定します.


まず,文字列の Unicode のコードポイント ()文字コード) を全て配列に格納します.そのコードポイントを 1 つづつ JIS コードに変換しながらチェックしていきます.このコードポイントは文字単位ではありません.エレメントという単位です.1 エレメントは 2 バイトです.複数エレメントの文字がありますが,環境に依存しない文字は全て 1 エレメント,つまり,2 バイトの文字です.

もし,ISO-2022-JP で規定している文字であれば,Unicode のコードポイントを JIS コードに変換すると,複数バイトのバイト列が取得できます.文字「粟」の場合は以下のようになります.30 40 がコード表に掲載されているJIS コードです.コンピュータの内部ではこのようなバイトデータとなります.その前後はエスケープシーケンスと呼ばれている値です.
JIS コードの前のエスケープシーケンスが B 24 42 の時が環境に依存しない文字候補です.




1B 24 42 30 40 1B 28 42



JIS X 0213 にも,このエスケープシーケンスの文字がありまます.
そこで,JIS コードから JIS の区点の「区」の値を計算して,区の値を kuno とした以下の条件の文字を環境に依存しない文字とします.それ以外を環境依存文字として処理しています.

JIS コードの上位バイトから 0x20 を減算すれば区の値です.文字「粟」の場合,0x30 - 0x20 = 16 なので 16 区の文字です.




(kuno <= 8 || (kuno >= 16 && kuno <= 84))



encoding.js は,上の参考リンクのページ上部左端の [code] をクリックして表示されたページの [code] をクリックして ZIP 書庫をダウンロードしました.その中身を,筆者が利用してているレンタルサーバに置いて使用しています.<head> 部を参考にしてください.以下のようになっています.赤の下線部分は,encoding.js 関係ファイルを置いているサーバでのディレクトリです.相対ディレクトリで記述しています.



<script type="text/javascript" src=" ../../cssjs/enc/encoding.js"></script>,