|
Delphi Programming / Object Pascal
[掲載 2023年11月18日] [更新 2024年04月25日] Delphi 一般・その他 [未分類 - OS の操作等] |
環境依存文字と機種依存文字 |
動作確認等 |
Windows 10 ビルド 19043 Pro 64 bit
Google Chrome 124, Microsoft Edge 124, Firefox 125 |
2023年の現在,機種依存文字と言える文字はありません.
1980 ~ 1990 年代のパソコンには,機種依存文字と呼ばれた文字がありました.機種依存文字と呼ばれた文字は,700 字程度ありました.環境依存文字は,現時点て 14 万字以上と言えます. |
「環境依存文字」は,日本産業規格 JIS X 0208 の規格ににはない,ASCII 文字 (アスキー文字) でもない文字のことです.半角カタカナは環境依存文字です. |
Windows では,環境依存文字は,日本語 IME のかな漢字変換の変換候補に [環境依存] あるいは [環境依存文字] のコメントが表示されます. |
|
図1
環境依存文字の場合 |
[備考 1]
ウエブ上の機種依存文字関係の記事に,機種依存文字と環境依存文字が同じ意味であるという記述があります.また,「機種依存文字 (環境依存文字)」などの表記もあります.それらの環境依存文字は,本項の環境依存文字のことではありません.
本項の環境依存文字は,コンピュータの機種とは何の関係もありません. |
[備考 2]
ウエブにある官公庁や自治体の問い合わせフォームでは,入力に使用する文字を制限している場合があります.それらの入力制限文字の説明にある,機種依存文字や環境依存文字は,実際には,本項の環境依存文字のことです.それらの入力フォームで使用可能な文字は,ASCII 文字と JIS X 0208 規格の文字です.
それらの入力フォームで使用可能な文字の制限は,コンピュータの機種とは関係ありません. |
下の図の下の枠内の文字は,かって「機種依存文字」と呼ばれていた文字です.
ウェブに掲載されている他のサイトの記事では,「機種依存文字は,特定の機種にしか存在しない文字のことで,環境依存文字とも言う」,あるいは「機種依存文字 (環境依存文字) は,機種や OS に依存し,別の機種や OS で使用すると文字化けする文字」などと説明されています.
今,皆さんは,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 にも依存しない文字です.
つまり,現在は,「機種依存文字」は存在しません. |
|
図2
旧 Mac 固有文字を使用
- これは Windows 2000 のメモ帳
- 文字化けしない
- 保存は UTF-8
|
下の枠内の文字は,以下のリンクの記事に掲載している表の文字と同じです.
これらの文字は,PC-9801 の機種依存文字,昔の Mac で機種依存文字と呼ばれていました.いずれの機種も,現在は全くと言っていいほど使用されていない機種と思われます.
ネット上の機種依存文字 (環境依存文字) に関する記事に掲載されている「機種依存文字 (環境依存文字)」は,これらの文字の一部,または全部です. |
半角カタカナは環境依存文字ですが,機種依存文字と呼ばれていた文字にはありません.半角カタカナは,どのパソコンでも使用できましたから,機種依存ではありませんでした.
前項の環境依存文字は,規格に基づいた用語です.一方,機種依存文字と呼ばれた文字は,ウェブに掲載されている記事の執筆者によって解釈が異なり,機種依存文字とししている文字が異なる場合があります.
半角カタカナを機種依存文字としている記事もあります.
ほとんどの機種依存文字に関する記事に共通しているのは,特定の機種や,それらの文字の由来,出所には触れていないことです. |
[備考 1]
1980 ~ 1990 年代,パソコンメーカは,自社のパソコン (機種) の漢字 ROM に,基本文字の他にも,独自に文字を追加実装していていました.機種依存文字は,その追加した機種固有の文字に対する俗称ですが,実際には,基本文字の一部も含めて,他の機種で使用すると文字化けする文字の意味で使われていて,明確な定義はありませんでした.
漢字 ROM (Read Only Memory) は,その当時のパソコンが搭載していた,読み出し専用の文字データを記録した IC (集積回路) です. |
[備考 2]
IBM PC の固有文字は,上のリンクの記事で確認できます.
富士通の FMV, Sharp の X68000 などのパソコンの漢字 ROM にも固有文字が実装されていましたが,筆者の手元には資料がないので掲載していません. |
[備考 3]
メインフレームには,2023年現在も Unicode 化されていないシステムがあります. |
[備考 4]
コンピュータの機種に関係なく,同じ仕様の機能を実現するのが OS です.そのために OS という概念が生まれました.つまり,OS には,機種に依存する機能はありません.OS と OS 上で動作するアプリで使用する文字も,機種に依存しません. |
機種依存文字と呼ばれていた文字が存在したのは,MS-OOS / PC-DOS の時代です.確かにその時代は,それらの文字が原因の文字化けがありました.
2024年の今では,30年近く前の時代です.もちろん,スマートフォンはない,インターネットのウェブページもない時代です. |
|
図2
PC-9801
- MS-DOS 起動時画面
- 「機種依存文字」が存在した時代
|
1993年5月に Windows 3.1 がリリースされました.この Windows 3.1 は,機種に固有である漢字 ROM を使用しません.フォントファイルに収録しているデータを使用して文字を描画します.その文字データの操作用に,Shift_JIS という文字符号化方式を使用するようになりました.この時,この Shift_JIS は, 半角カタカナと,IBM 拡張文字, NEC 拡張文字, NEC 特殊文字と呼ばれていた文字を登録しました.それによって,機種には関係なくそれらの追加文字も使用可能になりました.
これで,機種に依存するという意味の「機種依存文字」はなくなりました. |
|
図3
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 の文字 (補助漢字) が使用できます. |
2 つ目は,文字コードの違いです.同じ文字でも,文字符号化方式が異なると文字コードが異なります.文字コードが異なれば,それは別の文字を意味しますが,その文字コードに相当する文字がない場合もあります.
この文字コードの違いを意識する必要はほとんどありません.多くのアプリでは,その違いを自動で処理してくれるようになっています.
例えば,その当時の Windows は Shift_JISです (現在は UTF-16).日本語のインターネットメールは ISO-2022-JP ですが,メールの送受信でそれらの文字コードを意識する必要はありません.意識しなければならないのは,使用可能な文字です.
ISO-2022-JP を使用する日本語のインターネットメールで使用可能なのは,ASCII 文字と JIS X 0208 規格の文字です.それ以外の文字が「環境依存文字」です.つまり,ISO-2022-JP を使用する方式の日本語のインターネットメールで [環境依存文字」を使用すると,文字化けします.
つまり,テキストを処理するアプリが使用している文字符号化方式にはない文字は文字化けします. |
下図は文字化けの例です.
Windows 10 は UTF-16 ですから,入力の時は ISO-2022-JP 以外の文字も入力できます.メールの場合,保存したり送信する時に文字コードの変換が行われ,ISO-2022-JP にない文字が文字化けします.
このような場合,Unicode 対応のメール用アプリの多くは,警告を表示して,Unicode ユニコード) に変更することができるようになっています.Unicode に変更すると,UTF-8 での送信になります.また,UTF-8 での送受信をデフォルトに設定したり,UTF-8 での送受信がデフォルトになっているメール用アプリもあります.
以下は,テストに使用した文字列です. |
|
図4
文字化けの例
- 1 行目
入力時の文字コードは UTF-16
- 2 行目
ISO-2022-JP の文字コードに変更
|
もし,ウェブに掲載されている記事が,MS-DOS / PC-DOS の時代に掲載されたのであれば,機種固有の文字が文字化けの原因という説明で問題ありません.
実は,それは考えられません.
Windows 3.1 がリリースされるよりも前の 1992年9月30日,文部省 (現 文科省) - 高エネ研が,日本で初めて HTML 形式のウェブページを公開しました.しかし,ウェブページの閲覧や作成という形でインターネットが普及したのは,1995年11月に Windows 95 がリリースされてからです.
現在のような記事が掲載されたのはそれ以降ということになります.機種依存文字に関する記事には,2020年代に掲載されている記事もあります. |
下図は,Windows 95 の最終バージョンの起動時画面です.
インターネットに接続し,課金 (電話料金) を気にしながら,ホワイトハウスのサイトを閲覧し,アメリカの国旗がなびくのを観て,感動した方もいるのではないでしょうか.
「今は昔」の話ですが,多くの方にとって,機種依存文字は「今も昔」のようです. |
|
図5
Windows 95 OSR2.5
起動画面
|
[備考 1]
記事が時代に即した内容であるかは,その記事が書かれた時期で,ある程度判断できます.しかしながら,多くのウェブページには,記事の掲載年月日の記述がありません. |
[備考 2]
アプリのテキストで文字コードを意識しなくてもいいのは,それらのアプリ内部で,エンコードという処理で文字コードを変換しているからです.このような処理は,アプリを開発するプログラマの仕事です.メール用のアプリでは,その他にも暗号化などの処理も行います.
Microsoft Office 2019 のワードやエクセルは Unicode の UTF-8 ょを使用しますが,ISO-2022-JP のメールのテキストをコピーしてワードやエクセルに貼り付けても文字化けしません.これも,エンコードが自動で行われるからです.Shift_JIS (ANSI) で保存したメモ帳のテキストも,ワードやエクセルに貼り付けても文字化けしません. |
[備考 3]
Shift_JIS にも EUC-JP にも,機種依存文字と呼ばれていた文字の一部が含まれています.それらの文字は,現在は機種依存文字ではありません.それらの文字は,Shift_JIS, EUC-JP の文字の一部にすぎません. |
[備考 4]
マイクロソフトの戦略があったにせよ,Windows 95 のリリースによって多くの人が,PC-9801 ではないパソコンを使用し,インターネットを利用するようになりました.世間における,パソコン = ゲーム機という状況も変化し,パソコンは,業務にも使用されるようになりました.ワープロ専用機の衰退も加速させることになりました. |
文字の描画に使用するフォントが同じなら,文字符号化方式が違っても描画される字形 (グリフ) は同じです.文字符号化方式ごとに描画データが用意されているわけではありません.
例えば「東」という文字は,Shift_JIS の文字コードが 938C (16 進数) です.UTF-16 では 6771 (16 進数) です.文字「東」を描画する時,Windows 10 は,文字符号方式に関係なく UTF-16 の文字コードである 6771 の描画データを読み出して文字を描画します.
その文字符号化方式にはない文字 (文字コード) は,内部データを ? などの文字データに書き換えて,その文字を描画します.これが文字化けです. |
|
図6
フォントファイル内の文字描画データの構造
- 文字「東」の文字コードは
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 のメモ帳で設定したフォントとそのフォントリンクのフォントにも収録されていない文字です.
この時の四角形を「トーフ (豆腐)」と言います. |
|
図7
Unicode 時代の文字化け
- [書式] で指定したフォントでは描画できない文字は文字化けする
- フォントの設定は Tahoma
- Windows XP のリリースは 2001年11月
|
Windows XP に,Windows 10 の游ゴシックをインストールして,それを [書式] [フォント] で指定すると文字化けしません.游ゴシックフォントには,これらの文字が全て収録されています.
Uniode では,文字符号化方式の違いによる文字化けはありませんが,この例のように,設定したフォントとそのフォントリンクのフォントに収録されていない文字は,文字なしという状態になります.これは,広い意味では文字化けと言えます. |
|
図8
フォントを変更すれば文字化けしない
- フォントには,追加インストールした 游ゴシック を設定
- 游ゴシックフォントには,これらの全ての文字が収録されている
|
文字符号化方式の違いによる文字化けの場合は,文字化けした状態でフォントを変更しても,文字符号化方式を変更しても文字化けは直りません.文字符号化方式の違いによる文字化けの場合は,文字 (文字コード) そのものが文字化けした文字 (文字コード) になってしまいます.
Unicode における「文字なし」は,内部の文字コードはそのままで,代わりに四角形や四角にバツを表示します.その結果,その文字コードの文字が収録されているフォントを使用すれば,その文字を描画できます.
以下は,テストで使用した文字です.全て [環境依存文字」です.機種依存文字と呼ばれていた文字は 髙 だけです. |
𪘂 齩 𪘚 齭 齰 齵 𪚲 髙 𠮷 𩸽 𠮟 あ゙ ゔ か゚ こ゚ |
[備考]
現在の Windows のシステムの文字符号化方式は UTF-16 ですが,Microsoft Office 2007 以降のワードやエクセルは UTF-8 を使用しています. |
06_ウェブページの文字符号化方式 - HTML の文字コード |
ウェブブラウザは,HTML ファイルを読み込んでウェブページとして表示します.
現在のところ,ウェブブラウザは,HTML ファイルのテキストである HTML コードの文字符号化方式,つまり,文字コードの全てを自動判定して処理しません.文字コードを,HTML コードの head 部の charset で指定する必要があります.HTML ファイルを UTF-8 で保存して,charset の値を utf-8 にすると,ウェブページに Unicode の文字を表示できます.当然ですが,機種依存文字は存在しませんから,機種によって表示可能な文字が異なることはありません.
現在は utf-8 が主流です.
4 番目の Shift_JIS の HTML コードには,機種依存文字と呼ばれていた文字が含まれています.それらかの文字は,現在は機種依存文字ではありません.Shift_JIS 規格の文字です.したがって,4 番目のページは,どの機種で閲覧しても文字化けしません.6 番目の EUC-JP の場合も同じです.
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 で指定可能な名前の一覧です. |
|
図9
Microsoft Edge 122 の言語設定
- 世界には多くの国と地域がある
- それぞれに言語があり文字がある
|
[備考]
数値文字参照に限らす.文字コード (コードポイント) は 16 進数を使用するのが一般的です. |
あるいきさつで [環境依存文字と Unicode] という記事を書きました.しばらくして,その環境依存文字をチェックするツールを作成してみようと思いました.当然ネットで調べます.実は,その時初めて知りました.驚きました.機種依存文字のオンパレードです.しかも,機種依存文字は環境依存文字と同じだと言うのです.筆者の知識と記憶とは別の世界です.機種依存文字という用語は死語だと思っていました.
本ページは,筆者の知識としての記事です.
本ページの記事は,ネット上の機種依存文字と環境依依存文字の記事とはかなり違っています.多くの方を困惑させてしまったかも知れません.申し訳なく思っています. |
[備考 1]
ウェブに掲載されている機種依存文字 (環境依存文字) に関する記事は,情報の拡散の際に発生する一般的な現象の結果と思われます.
それにしても,猫も杓子も機種依存文字という感じがします.OS の概念も,文字符号化方式も,Unicode の理念も,明後日の方に行ってしまっています. |
[備考 2]
ネット上の機種依存文字関係の記事に,Shift_JIS だと機種依存文字は文字化けするが,UTF-8 であれば,機種依存文字による文字化けを回避できる,という記述があります.
それらの記事によると,機種依存文字とは,特定の機種以外の機種で使用すると文字化けする文字と言うのですから,機種依存文字による文字化けは機種によって決まるはずです.文字符号化方式は関係もないはずです.そのような摩訶不思議な,論理性のない現象は,普通に考えると有り得ません.
Shift_JIS でも,PC-9801 の機種依存文字と呼ばれた文字は文字化けしません.このことは,前項のテスト用ウェブページで確認できます. |
|