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







環境依存文字と機種依存文字


2023年の現在、機種依存文字と言える文字はありません。
1980 ~ 1990 年代のパソコンには、機種依存文字と呼ばれた文字がありました。機種依存文字と呼ばれた文字は、700 字から 800 字程度ありました。環境依存文字は、現時点て 14 万字以上です。





01_環境依存文字


「環境依存文字」は、日本産業規格 JIS X 0208 の規格ににはない、ASCII 文字 (アスキー文字) でもない文字のことです。半角カタカナは、JIS X 0208 にはないので環境依存文字です。



Windows では、環境依存文字は、日本語 IME のかな漢字変換の変換候補に [環境依存] あるいは [環境依存文字] のコメントが表示されます。




図1
環境依存文字の場合


[備考]
ウエブにある官公庁や自治体の問い合わせフォームでは、入力に使用する文字を制限している場合があります。それらの入力フォームで使用可能な文字は、ASCII 文字と JIS X 0208 規格の文字です。つまり、非環境依存文字だけです。



下図は、環境依存文字と機種依存文字と呼ばれた文字を模式化したものです。一番外側の楕円内は、コンピュータで扱える文字全体ですが、一般的には Unicode の文字ということになりますから、2023年の時点では約 15 万字になります。
Unicode に登録されている文字は、ユニコードコンソーシアムが公開している以下の PDF で閲覧できます。説明するまでもありませんが、この約 15 万字の Unicode の文字から、ASCII 128 文字と JIS X 0208 の 6,879 字を除いた文字が環境依存文字です。




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


  • ASCII 文字は 94 字
    (制御コード以外)
  • JIS X 0208 は 6,879 字

図3
機種依存存文字と呼ばれた文字
  • 明確な定義はなかった
  • 機種によって異なっていた
  • 700 字 ~ 800 字
  • JIS X 0208 と重複する文字があった




02_機種依存文字と呼ばれた文字


下の枠内の文字が、かって「機種依存文字」と呼ばれていた文字です。

今、皆さんは、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 だけで使用可能だった文字ですが、現在は、機種にも OS の種類にも関係なく使用できる文字です。
半角カタカナは、パソコン通信やメールで使用すると文字化けしましたが、機種依存文字ではありませんでしたから、他の機種との相互利用でも文字化けはしませんでした。




図4
昔の Windows で、旧 Mac 固有文字を使用
  • これは Windows 2000 のメモ帳
  • Windows 2000 のリリースは 2000年
  • 文字化けしない
  • 保存は UTF-8

[備考 1]
1980 ~ 1990 年代のパソコンは、文字データを記録した漢字 ROM (読み出し専用メモリ) という IC (集積回路) をハードウェアの一部として搭載していました。各々の機種で使用可能な文字は、その漢字 ROM の文字だけでした。

パソコンメーカは、自社のパソコン (機種) の漢字 ROM に、基本文字 (JIS X 0208 の文字) の他にも、独自に文字を追加実装していました。機種依存文字は、その追加した機種固有の文字に対する俗称です。つまり、その漢字 ROM を実装した機種でなければ使用できなかった文字です。実際には、基本文字の全てが使用できない機種もありました。そのため、機種依存文字という用語は、他の機種で使用すると文字化けする文字の意味で使われていて、明確な定義はありませんでした。


[備考 2]
IBM PC の固有文字は、上の参考リンクの記事で確認できます。
富士通の FMV、Sharp の X68000 などのパソコンの漢字 ROM にも固有文字が実装されていましたが、筆者の手元には資料がないので掲載していません。


[備考 3]
メインフレームには、2023年現在も Unicode 化されていないシステムがあります。

[備考 4]
コンピュータの機種に関係なく、同じ仕様の機能を実現するのが OS (オペレーティングシステム) です。そのために OS という概念が生まれました。つまり、OS には、機種に依存する機能はありません。OS が同じであれば、機種が違ってもアプリの機能は同じです。OS と OS 上で動作するアプリで使用する文字も、機種に依存しません。







03_使用可能な文字は文字符号化方式で決まる


機種依存文字と呼ばれていた文字が存在したのは、MS-OOS / PC-DOS の時代です。2024年の今では、30年近く前の時代です。もちろん、スマートフォンはない、インターネットのウェブページもなかった時代です。




図5
PC-9801
  • MS-DOS 起動時画面
  • 「機種依存文字」が存在した時代

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

これで、機種に依存するという意味の「機種依存文字」はなくなりましたが、機種依存文字という用語は、文字化けする文字の意味で、その後も使われていました。




図6
Windows 3.1 起動時画面

  • 「機種依存文字」はなくなった
  • ウェブブラウザは実装されていない

文字符号化方式による文字の処理では、コンピュータの 機種や OS に関係なく、アプリで使用可能な文字は、文字符号化方式によって決まります。
その文字符号化方式の規格にはない文字を使用すると、その文字は文字化けします。

Windows 3.1 / 95 /98 などの時代、Windows では Shift_JIS、OS/2 も Shift_JIS、mac OS では Mac Japanese、UNIX 系の OS では EUC-JP、日本語のインターネットメール (電子メール) では、OS には関係なく、非環境依存文字だけが使用可能な文字符号化方式 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 です。

以下は、テストに使用した文字列です。


𠮷野は IBM に𠮟られて泣いた



図7
文字化けの例
  • 1 行目
    入力時の文字コードは UTF-16
  • 2 行目
    ISO-2022-JP の文字コードに変更
    環境依存文字は文字化けする

[備考 1]
ISO-2022-JP を使用するメールは JIS メール (ジスメール) と呼ばれています。JIS メールで環境依存文字を使用すると文字化けします。


[備考 2]
アプリのテキストで文字コードを意識しなくてもいいのは、それらのアプリ内部で、エンコードという処理で文字コードを変換しているからです。このような処理は、アプリを開発するプログラマの仕事です。メール用のアプリでは、その他にも暗号化などの処理も行います。

Microsoft Office 2019 のワードやエクセルは Unicode の UTF-8 ょを使用しますが、JIS メールのテキストをコピーしてワードやエクセルに貼り付けても文字化けしません。Shift_JIS (ANSI) で保存したメモ帳のテキストも、ワードやエクセルに貼り付けても文字化けしません。





04_機種依存文字に関する記事はいつ掲載されたのか


ウェブ上には、機種依存文字と環境依存文字に関する記事が多く掲載されています。

Windows 3.1 がリリースされるよりも前の 1992年9月30日、文部省 (現 文科省) - 高エネ研が、日本で初めて HTML 形式のウェブページを公開しました。しかし、ウェブページの閲覧や作成という形でインターネットが普及したのは、1995年11月に Windows 95 がリリースされてからです。
現在のような記事が掲載されたのはそれ以降ということになります。機種依存文字に関する多くの記事が UTF-8 に触れていることから、それらの記事の掲載または更新は 2000年以降、あるいは Windows が全面的に Unicode 化された 2007年以降と思われます。



下図は、Windows 95 の最終バージョンの起動時画面です。
インターネットに接続し、課金 (電話料金) を気にしながら、ホワイトハウスのサイトを閲覧し、アメリカの国旗がなびくのを観て、感動した方もいるのではないでしょうか。




図8
Windows 95 OSR2.5
起動画面
  • ネット時代の幕開け

[備考]
記事が時代に即した内容であるかは、その記事が書かれた時期で、ある程度判断できます。しかしながら、記事の掲載年月日の記述がないウェブページが多くあります。





05_文字符号化方式とフォント


文字の描画に使用するフォントが同じなら、文字符号化方式が違っても描画される字形 (グリフ) は同じです。文字符号化方式ごとに描画データが用意されているわけではありません。

例えば「東」という文字は、Shift_JIS のコードポイントは 938C です。UTF-16 では 6771 です。文字「東」を描画する時、文字符号化方式が UTF-16 ではない場合、UTF-16 のコードポイントである 6771 に変換して、その描画データを読み出して文字を描画します。
その文字符号化方式にはないコードポイントは、そのコードポイントを ? などのコードポイント書き換えて、その文字を描画します。これが文字化けです。




図9
フォントファイル内の文字描画データの構造
  • 文字「東」の文字コードは
    ISO-2022-JP では 456C
    Shift_JIS では 938C
    UTF-8 では E6 9D B1
    UTF-16 では 6771
  • どの場合も
    フォントファイル内の 6771 の
    描画データを使用する


  • フォントファイルにあるのは、文字そのものではなく、文字の描画用データ




06_Unicode 時代の文字化け


現在は Unicode の時代です。多くのアプリが Unicode 化されています。文字符号化方式を意識する必要はほとんどありません。Unicode では世界中の文字が使用できます。

テキストの相互利用で、テキストを受け取って処理する側の文字符号化方式が Unicode の UTF-8 または UTF-16 の場合は、文字符号化方式の違いによる文字化けはないことになります。

下図は、Windows 10 のメモ帳で作成したテキストを UTF-16 で保存し、それを Windows XP のメモ帳で開いた結果です。四角形のグリフは、Windows XP のメモ帳で設定したフォントとそのフォントリンクのフォントにも収録されていない文字です。
この時の四角形を「トーフ (豆腐)」と言います。




図10
Unicode 時代の文字化け
  • [書式] で指定したフォントでは描画できない文字は文字化けする
  • フォントの設定は Tahoma
  • Windows XP のリリースは 2001年11月

Windows XP に、Windows 10 の游ゴシックをインストールして、それを [書式] [フォント] で指定すると文字化けしません。游ゴシックフォントには、これらの文字が全て収録されています。
Unicode では、文字符号化方式の違いによる文字化けはありませんが、この例のように、設定したフォントとそのフォントリンクのフォントに収録されていない文字は、文字なしという状態になります。これは、広い意味では文字化けと言えます。




図11
フォントを変更すれば文字化けしない
  • フォントには、追加インストールした 游ゴシック を設定
  • 游ゴシックフォントには、これらの全ての文字が収録されている

文字符号化方式の違いによる文字化けの場合は、文字化けした状態で文字符号化方式を変更しても、 フォントを変更しても文字化けは直りません。文字符号化方式の違いによる文字化けの場合は、文字 (文字コード) そのものが文字化けした文字 (文字コード) になってしまいます。
Unicode における「文字なし」は、内部の文字コードはそのままで、代わりに四角形や四角にバツを表示します。その結果、その文字コードの文字が収録されているフォントを使用すれば、その文字を描画できます。

以下は、テストで使用した文字です。全て [環境依存文字」です。機種依存文字と呼ばれていた文字はだけです。


𪘂 齩 𪘚 齭 齰 齵 𪚲 髙 𠮷 𩸽 𠮟 あ゙ ゔ か゚ こ゚


[備考]
現在の Windows のシステムの文字符号化方式は UTF-16 ですが、Microsoft Office 2007 以降のワードやエクセルは UTF-8 を使用しています。


Unicode 時代になった現在、次のように考えるといいかも知れません。



昔は、パソコンの性能が十分ではなかったので、扱える文字が限られていました。そのため、パソコンの機種によって使用可能な文字が異なることがあり、テキストの相互利用で文字化けという問題がありました。文字化けする文字は、それぞれの機種に固有の文字で、機種依存文字と呼ばれていました。

現在はそのようなことはありません。現在は、機種や OS に関係なく、使用可能な文字は、文字の表示に使用するフォント (文字を収録したファイル) によって決まります。す。ASCII 文字と日本産業規格で制定されている文字は、日本語用フォント (和文フォント) であれば全て収録されていますから、どの「環境」でも使用可能です。

ただし、一部のメール送受信用アプリや、ウェブページの入力フォームでは、ASCII 文字と日本産業規格で定めた文字以外は使用できないようになっている場合があります。
ASCII 文字でもない、その規格にもない文字を環境依存文字と言います。機種依存文字と呼ばれていた文字の多くは環境依存文字の一部です。





07_ウェブページの文字符号化方式 - HTML の文字コード


ウェブブラウザは、HTML ファイルを読み込んでウェブページとして表示します。
現在のところ、ウェブブラウザは、HTML ファイルのテキストである HTML コードの文字符号化方式、つまり、文字コードの全てを自動判定して処理しません。文字コードを、HTML コードの head 部の charset で指定する必要があります。HTML ファイルを UTF-8 で保存して、charset の値を utf-8 にすると、ウェブページに Unicode の文字を表示できます。
現在は utf-8 が主流です。

charset の設定に関係なく(shift_jis を指定した場合でも)、数値文字参照を使用すれば Unicode の文字が表示できます。数値文字参照の数値には UTF-16 のコードポイント (文字コード) を使用します。 例えば文字 東 の数値文字参照は 東 です。
下の表内のリンクをクリックすると、動作確認用のページを表示します。

ここでの「Unicode の文字」とは、Shift_JIS にも Euc-JP にもない文字のことです。
1 番目と 2 番目のページの内容は、charset の有無の違いだけです。
4 番目と 5 番目のページの内容は、charset の有無の違いだけです。
6 番目と 7 番目のページの内容は、charset の有無の違いだけです。

これらのページ全てに、PC-9801 の機種依存文字と呼ばれた文字である 黑 髙 﨑 があります。筆者の環境では、2 番目のページだけが文字化けします。


No HTML コードの文字 保存 charset 指定
  1 Shift_JIS、euc-jp 以外の文字も使用 UTF-8

utf-8

  2 Shift_JIS、euc-jp 以外の文字も使用 UTF-8

指定なし

  3 Shift_JIS、euc-jp 以外の文字も使用 UTF-8 (BOM 付き)

指定なし

  4 Shift_JIS の文字だけを使用 Shift_JIS

shift_is

  5 Shift_JIS の文字だけを使用 Shift_JIS

指定なし

  6 EUC-JP の文字だけを使用 EUC-JP

euc-jp

  7 EUC-JP の文字だけを使用 EUC-JP

指定なし

  8 数値文字参照で文字を表示
Shift_JIS 以外の文字も使用
Shift_JIS

shift_jis



リンクのページを表示した後、[Ctrl] + [U] のキー操作で HTML コードを表示して確認できます。別タブでの表示となります。

世界には多くの国や地域があり、それぞれに言語があります。Unicode が普及する前は、それぞれの言語の文字符号化方式が使用されていました。それらの言語の文字符号化方式では、同じ文字コードを、複数の文字符号化方式の文字が使用していることがあります。そのため、文字符号化方式の自動判定が困難となっています。
以下は、IANA ((インターネット番号割当機関) による charset で指定可能な名前の一覧です。




図12
Microsoft Edge 122 の言語設定
  • 世界には多くの国と地域がある
  • それぞれに言語があり文字がある




08_ISO-2022-JP における文字の符号化


ISO-2022-JP は、JIS メールと呼ばれているインターネットメール (電子メール) で使われてきた文字符号化方式です。

初期のインターネットにおけるデータ通信は、バケツリレーと呼ばれ、英語圏のサーバも含めた複数のサーバを経由して行われていました。英語圏のコンピュータは、1 文字を 7 ビットで処理していました。この文字コードは 16 進数で 0 ~ 7F ですが、0 ~ 20 と 7F は空白文字と制御コードで、英数字と記号類は 21 ~ 7E の 94 文字だけです。英語圏ではこれで十分なのですが、これでは日本語で使用する文字は扱えません。
そこで考え出されたのが ISO-2022-JP という文字符号化方式です。ISO-2022-JP では、例えば、文字列「ABC粟東」は以下のようなバイトデータになります。赤の下線はエスケープシーケンスと言われていて、このエスケープシーケンスの間に 2 バイトの文字コードを挿入します。各バイトは 21 ~ 7E の値でなければなりません。この時、この文字コードを JIS コードと言います。




// 文字列「ABC粟東」のバイトデータ。3040 が「粟」の、456C が「東」の JIS コード
41 42 43 1B 24 42 30 40 45 6C 1B 28 42



ISO-2022-JP が扱う日本語の文字は JIS X 0208 区点コード表の文字です。JIS X 0208 の区と点の値に 16 進数の 20 を加算すると、下表に示すように、全ての区と点の値が 16 進数の 21 ~ 7E の間に収まります。それらの値をそれぞれ文字コードの上位バイトと下位バイトとして使用します。
例えば「粟」という文字の区と点の値は 16 と 32 です。16 進数では 10 と 20 です。16 進数の 20 を加算すると 30 と 40 になりますから、JIS コードは 3040 となります。

区点コード表は、規格名が「7 ビット及び 8 ビットの・・・」となっているように、7 ビットの処理系にも対応可能な仕様になっています。



JIS X 0208 における範囲 16 進数の 20 を加算した値
1 ~ 84 (16 進数では 1 ~ 54) 21 ~ 74 (JIS コードの上位バイト)
1 ~ 94 (16 進数では 1 ~ 5E) 21 ~ 7E (JIS コードの下位バイト)


[備考 1]
半角カタカナは、機種依存文字と呼ばれた文字にはありませんが、JIS メールで使用すると文字化けします。機種依存文字と呼ばれた文字の中には、JIS メールで使用しても文字化けしない文字があります。


[備考 2]
現在の ISO-2022-JP には、エスケープシーケンスが異なるいくつかの種類があり、JIS X 0208 以外の文字も処理できるようになっていますが、それらの全てが Windows 10 で利用できるわけではありません。
現在は Unicode の時代です。その必要性もないと思われます。





09_後記


ネット上には、環境依存文字と機種依存文字の記事が多く掲載されています。それらの記事の内容と筆者の知識と記憶には違いがあります。機種依存文字という用語は死語だと思っていました。



[備考]
ウェブに掲載されている機種依存文字と環境依存文字に関する記事は、情報の拡散の際に発生する一般的な現象の結果と思われます。
それにしても、OS の概念も、文字符号化方式も、Unicode の理念も、明後日の方に行ってしまっています。しかし、これが、情報拡散における現実です。