|
Delphi Programming / Object Pascal

[掲載 2023年11月18日] [更新 2025年06月23日] Delphi 一般・その他 [未分類 - OS の操作等] |
環境依存文字と機種依存文字 |
動作確認等 |
Windows 10 ビルド 19043 Pro 64 bit
Google Chrome 124, Microsoft Edge 124, Firefox 125 |
2023年の現在,機種依存文字と言える文字はありません.
1980 ~ 1990 年代のパソコンには,機種依存文字と呼ばれた文字がありました.機種依存文字と呼ばれた文字は,700 字から 800 字程度ありました.環境依存文字は,現時点て 14 万字以上と言えます. |
「環境依存文字」は,日本産業規格 JIS X 0208 の規格ににはない,ASCII 文字 (アスキー文字) でもない文字のことです.半角カタカナは,JIS X 0208 にはないので環境依存文字です. |
Windows では,環境依存文字は,日本語 IME のかな漢字変換の変換候補に [環境依存] あるいは [環境依存文字] のコメントが表示されます. |

|
図1
環境依存文字の場合 |
[備考 1]
ウエブにある官公庁や自治体の問い合わせフォームでは,入力に使用する文字を制限している場合があります.それらの入力フォームで使用可能な文字は,ASCII 文字と JIS X 0208 規格の文字です.つまり,下の最初の図の非環境依存文字だけです. |
下図は,環境依存文字と機種依存文字と呼ばれた文字を模式化したものです.一番外側の楕円内は,コンピュータで扱える文字全体ですが,一般的には Unicode の文字ということになりますから,2023年の時点では約 15 万字になります. |

|
図2
環境依存文字
- 日本産業規格に基づく定義
- 機種や OS に関係ない定義
- 14 万字以上
|

|
図3
機種依存存文字と呼ばれた文字
- 機種によって異なる
- 700 字 ~ 800 字
- JIS X 0208 と重複する文字がある
|
下の枠内の文字は,かって「機種依存文字」と呼ばれていた文字です.
今,皆さんは,PC-9801 でもない,IBM PC でもないコンピュータで本ページを閲覧していると思います.しかし,下の枠内の文字が文字化けしないで表示されていると思います.Apple 社の mac で閲覧しても文字化けはしません.
これは,これらの文字が機種依存ではないことになります.
Windows は,2000年2月リリースの Windows 2000 から Unicode による処理が可能になりました.mac は,2001年2月リリースの mac OS X で Unicode 化されています.UNIX 系の OS も 2000年前後に Unicode 化されています.機種依存文字と呼ばれた文字は全て Unicode に登録されていて,日本語用のフォントファイルに収録されています.したがって,機種依存文字と呼ばれていた文字も,現在では,機種にも OS にも依存しない文字です.
つまり,現在は,「機種依存文字」は存在しません. |
上の枠内の文字は,昔は,PC-9801 の機種依存文字,Mac の機種依存文字と呼ばれていました.つまり,昔は PC-9801 あるいは Mac だけで使用可能だった文字ですが,現在は,機種に関係なく使用できる文字です.
半角カタカナは,機種依存文字と呼ばれていた文字にはありません.半角カタカナは,どのパソコンでも使用できましたから,機種依存ではありませんでした. |

|
図4
昔の Windows で,旧 Mac 固有文字を使用
- これは Windows 2000 のメモ帳
- 文字化けしない
- 保存は UTF-8
|
[備考 1]
1980 ~ 1990 年代,パソコンメーカは,自社のパソコン (機種) の漢字 ROM に,基本文字の他にも,独自に文字を追加実装していていました.機種依存文字は,その追加した機種固有の文字に対する俗称です.実際には,基本文字の一部も含めて,他の機種で使用すると文字化けする文字の意味で使われていて,明確な定義はありませんでした.
漢字 ROM (Read Only Memory) は,その当時のパソコンがハードウェアの一部として搭載していた,読み出し専用の文字データを記録した IC (集積回路) です. |
[備考 2]
IBM PC の固有文字は,上のリンクの記事で確認できます.
富士通の FMV, Sharp の X68000 などのパソコンの漢字 ROM にも固有文字が実装されていましたが,筆者の手元には資料がないので掲載していません.
1980年代後半に登場したワープロ専用機にも機種固有の文字がありました.それらの文字は,互換性のない文字とも言われていました.2000年代になると,パソコン通信機能を実装したワープロ専用機も現れました.ワープロ専用機という用語も,歴史的な用語と言えます. |
[備考 3]
メインフレームには,2023年現在も Unicode 化されていないシステムがあります. |
[備考 4]
コンピュータの機種に関係なく,同じ仕様の機能を実現するのが OS です.そのために OS という概念が生まれました.つまり,OS には,機種に依存する機能はありません.OS が同じであれば,機種が違ってもアプリの機能は同じです.OS と OS 上で動作するアプリで使用する文字も,機種に依存しません.したがって,文字の使用で機種や OS を意識する必要はありません. |
機種依存文字と呼ばれていた文字が存在したのは,MS-OOS / PC-DOS の時代です.2024年の今では,30年近く前の時代です.もちろん,スマートフォンはない,インターネットのウェブページもなかった時代です. |

|
図6
PC-9801
- MS-DOS 起動時画面
- 「機種依存文字」が存在した時代
|
1993年5月に Windows 3.1 がリリースされました.この Windows 3.1 は,機種に固有である漢字 ROM を使用しません.フォントファイルに収録しているデータを使用して文字を描画します.その文字データの操作用に,Shift_JIS という文字符号化方式を使用するようになりました.この時,この Shift_JIS は, 半角カタカナと PC-9801 の固有文字と IBM の固有文字も追加登録しました.それによって,機種には関係なくそれらの文字が使用可能になりました.
これで,機種に依存するという意味の「機種依存文字」はなくなりました. |

|
図7
Windows 3.1 起動時画面
- 「機種依存文字」はなくなった
- ウェブブラウザは実装されていない
|
文字符号化方式による文字の処理では,コンピュータの
機種や OS に関係なく,アプリで使用可能な文字は,文字符号化方式によって決まります.
その文字符号化方式の規格にはない文字を使用すると,その文字は文字化けします.
Windows 3.1 / 95 /98 などの時代,Windows では Shift_JIS, OS/2 も Shift_JIS, mac OS では
Mac Japanese, UNIX 系の OS では EUC-JP, 日本語のインターネットメール (電子メール) では,非環境依存文字だけが使用可能な ISO-2022-JP と言う文字符号化方式が使用されていました.
テキスト (文字) を,他のアプリ,あるいは,他のコンピュータのアプリなどと相互利用する場合,文字化けは,文字符号化方式の違いによって発生します. |
文字符号化方式の違いによる文字化けの要因は 2 つあります.
1 つ目は,文字符号化方式で使用可能な文字の違いです.使用可能な文字は,その文字符号化方式の規格に登録されている文字です.
Shift_JIS に登録されている文字は,以下の最初のリンクの記事で確認できます.EUC-JP では,JIS X 0212 の文字 (補助漢字) と Shift_JIS の文字が使用できます. |
2 つ目は,文字コードの違いです.同じ文字でも,文字符号化方式が異なると文字コードが異なります.文字コードが異なれば,それは別の文字を意味しますが,その文字コードに相当する文字がない場合もあります.
この文字コードの違いを意識する必要はほとんどありません.多くのアプリでは,その違いを自動で処理してくれるようになっています.
例えば,その当時の Windows は Shift_JISです (現在は UTF-16).日本語のインターネットメールは ISO-2022-JP ですが,メールの送受信でそれらの文字コードを意識する必要はありません.意識しなければならないのは,使用可能な文字です.
ISO-2022-JP を使用する日本語のインターネットメールで使用可能なのは,非環境依存文字だけです.ISO-2022-JP を使用する方式の日本語のインターネットメールで [環境依存文字」を使用すると,文字化けします.
つまり,テキストを処理するアプリが使用している文字符号化方式にはない文字は文字化けします. |
下図は文字化けの例です.
Windows 10 は UTF-16 ですから,入力の時は ISO-2022-JP 以外の文字も入力できます.メールの場合,保存したり送信する時に文字コードの変換が行われ,ISO-2022-JP にない文字が文字化けします.
このような場合,Unicode 対応のメール用アプリの多くは,警告を表示して,Unicode ユニコード) に変更することができるようになっています.Unicode に変更すると,UTF-8 での送信になります.また,UTF-8 での送受信をデフォルトに設定したり,UTF-8 での送受信がデフォルトになっているメール用アプリもあります.
スマートフォントに実装されているメール用アプリは,基本的に UTF-8 です.
以下は,テストに使用した文字列です. |

|
図8
文字化けの例
- 1 行目
入力時の文字コードは UTF-16
- 2 行目
ISO-2022-JP の文字コードに変更
環境依存文字は文字化けする |
[備考 1]
アプリのテキストで文字コードを意識しなくてもいいのは,それらのアプリ内部で,エンコードという処理で文字コードを変換しているからです.このような処理は,アプリを開発するプログラマの仕事です.メール用のアプリでは,その他にも暗号化などの処理も行います.
Microsoft Office 2019 のワードやエクセルは Unicode の UTF-8 ょを使用しますが,ISO-2022-JP のメールのテキストをコピーしてワードやエクセルに貼り付けても文字化けしません.これも,エンコードが自動で行われるからです.Shift_JIS (ANSI) で保存したメモ帳のテキストも,ワードやエクセルに貼り付けても文字化けしません. |
04_機種依存文字に関する記事はいつ掲載されたのか |
ウェブ上には,機種依存文字と環境依存文字に関する記事が多く掲載されています.
Windows 3.1 がリリースされるよりも前の 1992年9月30日,文部省 (現 文科省) - 高エネ研が,日本で初めて HTML 形式のウェブページを公開しました.しかし,ウェブページの閲覧や作成という形でインターネットが普及したのは,1995年11月に Windows 95 がリリースされてからです.
現在のような記事が掲載されたのはそれ以降ということになります.機種依存文字に関する多くの記事が UTF-8 に触れていることから,それらの記事の掲載または更新は 2000年以降,あるいは Windows が全面的に Unicode 化された 2007年以降と思われます. |
下図は,Windows 95 の最終バージョンの起動時画面です.
インターネットに接続し,課金 (電話料金) を気にしながら,ホワイトハウスのサイトを閲覧し,アメリカの国旗がなびくのを観て,感動した方もいるのではないでしょうか. |

|
図9
Windows 95 OSR2.5
起動画面
|
[備考 1]
記事が時代に即した内容であるかは,その記事が書かれた時期で,ある程度判断できます.しかしながら,記事の掲載年月日の記述がないウェブページが多くあります. |
[備考 2]
マイクロソフトの戦略があったにせよ,Windows 95 のリリースによって多くの人が,PC-9801 ではないパソコンを使用し,インターネットを利用するようになりました.世間における,パソコン = ゲーム機という状況も変化し,パソコンは,業務にも使用されるようになりました.ワープロ専用機の衰退も加速させることになりました. |
文字の描画に使用するフォントが同じなら,文字符号化方式が違っても描画される字形 (グリフ) は同じです.文字符号化方式ごとに描画データが用意されているわけではありません.
例えば「東」という文字は,Shift_JIS の文字コードが 938C (16 進数) です.UTF-16 では 6771 (16 進数) です.文字「東」を描画する時,Windows 10 は,文字符号方式に関係なく UTF-16 の文字コードである 6771 の描画データを読み出して文字を描画します.
その文字符号化方式にはない文字 (文字コード) は,内部データを ? などの文字データに書き換えて,その文字を描画します.これが文字化けです. |

|
図10
フォントファイル内の文字描画データの構造
- 文字「東」の文字コードは
ISO-2022-JP では 456C
Shift_JIS では 938C
UTF-8 では E6 9D B1
UTF-16 では 6771
- どの場合も
フォントファイル内の 6771 の
描画データを使用する
- フォントファイルにあるのは,文字そのものではなく,文字の描画用データ
|
現在は Unicode の時代です.多くのアプリが Unicode 化されています.文字符号化方式を意識する必要はほとんどありまん.Unicode では世界中の文字が使用できます.
テキストの相互利用で,テキストを受け取って処理する側の文字符号化方式が Unicode の UTF-8 または UTF-16 の場合は,文字符号化方式の違いによる文字化けはないことになります.
下図は,Windows 10 のメモ帳で作成したテキストを UTF-16 で保存し,それを Windows XP のメモ帳で開いた結果です.四角形のグリフは,Windows XP のメモ帳で設定したフォントとそのフォントリンクのフォントにも収録されていない文字です.
この時の四角形を「トーフ (豆腐)」と言います. |

|
図11
Unicode 時代の文字化け
- [書式] で指定したフォントでは描画できない文字は文字化けする
- フォントの設定は Tahoma
- Windows XP のリリースは 2001年11月
|
Windows XP に,Windows 10 の游ゴシックをインストールして,それを [書式] [フォント] で指定すると文字化けしません.游ゴシックフォントには,これらの文字が全て収録されています.
Uniode では,文字符号化方式の違いによる文字化けはありませんが,この例のように,設定したフォントとそのフォントリンクのフォントに収録されていない文字は,文字なしという状態になります.これは,広い意味では文字化けと言えます. |

|
図12
フォントを変更すれば文字化けしない
- フォントには,追加インストールした 游ゴシック を設定
- 游ゴシックフォントには,これらの全ての文字が収録されている
|
文字符号化方式の違いによる文字化けの場合は,文字化けした状態でフォントを変更しても,文字符号化方式を変更しても文字化けは直りません.文字符号化方式の違いによる文字化けの場合は,文字 (文字コード) そのものが文字化けした文字 (文字コード) になってしまいます.
Unicode における「文字なし」は,内部の文字コードはそのままで,代わりに四角形や四角にバツを表示します.その結果,その文字コードの文字が収録されているフォントを使用すれば,その文字を描画できます.
以下は,テストで使用した文字です.全て [環境依存文字」です.機種依存文字と呼ばれていた文字は 髙 と ゔ だけです. |
𪘂 齩 𪘚 齭 齰 齵 𪚲 髙 𠮷 𩸽 𠮟 あ゙ ゔ か゚ こ゚ |
[備考 1]
現在の Windows のシステムの文字符号化方式は UTF-16 ですが,Microsoft Office 2007 以降のワードやエクセルは UTF-8 を使用しています. |
Unicode 時代になった現在,次のように考えるといいかも知れません. |
昔は,パソコンの性能が十分ではなかったので,扱える文字が限られていました.そのため,パソコンの機種によって使用可能な文字が異なることがあり,文字化けという問題がありました.現在はそのようなことはありません.現在は,機種や OS に関係なく,使用可能な文字は,文字の表示に使用するフォントによって決まります. ただし,一部のメール送受信用アプリや,ウェブページの入力フォームなどでは,日本産業規格で定めた文字だけを使用するようにしている場合があります.その規格にない文字を「環境依存文字」と言います.
|
07_ウェブページの文字符号化方式 - HTML の文字コード |
ウェブブラウザは,HTML ファイルを読み込んでウェブページとして表示します.
現在のところ,ウェブブラウザは,HTML ファイルのテキストである HTML コードの文字符号化方式,つまり,文字コードの全てを自動判定して処理しません.文字コードを,HTML コードの head 部の charset で指定する必要があります.HTML ファイルを UTF-8 で保存して,charset の値を utf-8 にすると,ウェブページに Unicode の文字を表示できます.
現在は utf-8 が主流です.
shift_jis を指定した場合でも,数値文字参照を使用すれば,Unicode の文字が表示できます.例えば,コードポイントが U+6771 の文字 東 の数値文字参照は 東 です.
表内のリンクをクリックすると,動作確認用のページを表示します.
ここでの「Unicode の文字」とは,Shift_JIS にも Euc-JP にもない文字のことです.
1 番目と 2 番目のページの内容は,charset の有無の違いだけです.
4 番目と 5 番目のページの内容は,charset の有無の違いだけです.
6 番目と 7 番目のページの内容は,charset の有無の違いだけです.
これらのページ全てに,PC-9801 の機種依存文字と呼ばれた文字である 黑 髙 﨑 があります.筆者の環境では,2 番目のページだけが文字化けします.
|
リンクのページを表示した後,[Ctrl} + [U] のキー操作で HTML コードを表示して確認できます.別タブでの表示となります.
世界には多くの国や地域があり,それそれに言語があります.Unicode が普及する前は,それぞれの言語の文字符号化方式が使用されていました.それらの言語の文字符号化方式では,同じ文字コードを,複数の文字符号化方式の文字が使用していることがあります.そのため,文字符号化方式の自動判定が困難となっています.
以下は,IANA ((インターネット番号割当機関) による charset で指定可能な名前の一覧です. |

|
図13
Microsoft Edge 122 の言語設定
- 世界には多くの国と地域がある
- それぞれに言語があり文字がある
|
あるいきさつで [環境依存文字と Unicode] という記事を書きました.しばらくして,その環境依存文字をチェックするツールを作成してみようと思いました.当然ネットで調べます.実は,その時初めて知りました.驚きました.機種依存文字のオンパレードです.しかも,機種依存文字は環境依存文字と同じだと言うのです.更に,OS にも依存すると言うのです.筆者の知識と記憶とは全く別の世界です.機種依存文字という用語は死語だと思っていました. |
[備考 1]
ウェブに掲載されている機種依存文字と環境依存文字に関する記事は,情報の拡散の際に発生する一般的な現象の結果と思われます.
それにしても,OS の概念も,文字符号化方式の意味も,Unicode の理念も,明後日の方に行ってしまっています.しかし,これが情報拡散における現実です. |
|