機種依存文字（きしゅいぞんもじ）または環境依存文字（かんきょういぞんもじ）とは、電子的に扱う文字データのうち、処理系（ソフトウェアおよびハードウェア）によって違う文字に表示されたり、全く表示印刷できなかったりするものの慣用的な総称である。JEFやJIPS等のようなメインフレーム/汎用機用の符号化文字集合については、文字コード体系そのものが機種依存するという前提があるため、本項では扱わない。

不特定多数との情報通信で機種依存文字を使用すると文字化けの原因にもなる。

機種依存文字に関する歴史

初期 
日本語の文字コード体系は、JIS C 6226-1978によって第1水準漢字、第2水準漢字、非漢字として規格化されたが、これらは実際の文書作成の際に必要となる記号や組文字を十分に組み込んだものではなかった。そして、コード空間の空き領域（09区-15区）は「一時的・局所的に文字を割り当てて使用しても構わない」自由領域とされた（この規定は1997年のJIS X 0208-1997から削除）。

そのため、コンピュータメーカー各社はそれぞれ独自に拡張した記号類をこの領域に収録し、外字領域として扱われることになった。また、ユーザーもこの領域に独自に文字を登録（外字登録）できることが一般的になった。コンピュータの機種によって違う文字が表示されるコード領域となった。

代表格は、
 丸囲み数字（○は0-50、●は0-20、◎は1-10）
 ローマ数字（ラテン文字大文字小文字共通1-12, 大文字のみ50, 100, 500, 1000, 5000, 1万, 5万, 10万）

問題の表面化 
1986年頃から主要なパソコン通信サービスが開始されるようになった。多くのパーソナルコンピュータ（パソコン、PC）がホスト局に接続され、電子掲示板や電子メールなどで文章のやり取りが行われるようになると、特に問題となったのがPC-9800シリーズとMacintosh・DOS/V間での表示の相違だった。このことから、これらのコードをパソコン通信等の世界では「機種依存文字」と呼ぶようになった。

また、当時PC-9800シリーズのシェアが多かったために、PC-9800（あるいはエプソンのPC-9800互換機）シリーズでしか表示できない文字として「98文字」（キューハチ文字）と呼ぶようになった。

Macintoshが機種依存文字で不利な立場に立たされたのは、シェアの低さだけでなく、Microsoft Windowsが1992年という早い段階からWindows標準システム外字に統一されたのに対して、Macintoshは二転三転を繰り返してきたことも指摘されている。

1990年代末以降にはNTTドコモのiモードを始めとする日本国内の携帯電話のインターネット接続サービス対応電話機で「絵文字」が登場する。しかし、当初の絵文字はそれぞれの通信キャリアが独自にShift_JISのユーザー拡張領域やUnicodeの私的領域に登録するといった形で実装を行ったため、通信キャリア間の互換性が無かった。のちに各社は通信キャリア間で送受信されるキャリアメールに含まれる絵文字を自動変換するなどの対応を行ったものの、完全とは言い難かった。また、ウェブにおける携帯電話向けサイトでは、それぞれのサイトが訪問者の通信キャリアに応じた規格で絵文字を送信する仕組みを実装するなどの対応を強いられた。

Unicode以降 
機種依存文字の代表格だった丸囲み数字、ローマ数字などがに収録され規格内のコードとなった。したがって、コード名（UTF-8など）を正しく提示して使用するならば、機種依存性が解消されることとなった。

オペレーティングシステム (OS) の内部コードでUnicodeが採用されて以降、レガシーソフトウェアなどを除いて機種依存文字は解消されていった。携帯電話の絵文字についても、2000年代に入ってから日本国外の事業者が主導する形で規格統一が行われ、2010年にUnicodeに収録されたことで通信キャリア間の互換性問題が一段落したのみならず、PCでも絵文字が利用可能になった。ただし、Unicodeではその後も新たな絵文字の考案と規格への追加収録が続いており、古いバージョンのOSでは新しい絵文字が表示されないといった互換性問題は残っている。

同じOS上で複数の異なるフォントセットを使えるため、機種という言葉の意味は失われているものの、歴史的な経緯から、表示に関してフォントセットに依存する文字の総称として使用されることがあるが、本来の「機種依存文字」と意味合いは異なる。

Unicodeでは漸進的に文字を追加しており、追加された時期が新しい場合、フォントが対応しておらず表示できないことが多い（各文字の追加された時期についてはUnicode一覧表で確認できる）。また、基本多言語面にない文字や合成が必要な文字はOSやアプリケーションがそれらに対応している必要があり、対応していない場合はそれらの文字を含むフォントがあっても表示できない。

機種依存文字の定義

1980年代 
1980年代においては、以下の理由により、ベンダ定義文字（各コンピュータメーカーが、公的規格には無い文字を独自に拡張して搭載した文字）が、機種依存文字であるという定義が成り立っていた。
 日本語文字コードの公的規格はJIS X 0201とJIS X 0208だけだった。
 各メーカーのPCごとに搭載されているフォントセットの文字集合がまちまちだった。
ただし、公的規格であっても、以下のような文字は、規格が普及・定着するまでは機種依存文字とされることがあった。
 JIS X 0208 第2水準
 JIS X 0208 第2次規格 (JIS C 6226-1983。新JIS・83JISとも呼ばれる) で追加もしくは字形が変更された文字

2000年代以降 
以下の理由により2000年代以降では、

 Microsoft WindowsにおいてShift_JISに独自拡張された文字（Microsoftコードページ932）は、全てUnicodeに登録されている。
 現在、日本で使われる符号化文字集合の公的規格は以下のように何種類も存在する。またそれぞれの規格が改正された場合には有効とされる規格は最新版だけであるが、過去の版の規格に基づいたシステムも存在する。
 JIS X 0201
 JIS X 0208:1997
 JIS X 0212:1990
 JIS X 0213:2004
 JIS X 0221:2001（≒ ISO/IEC 10646-1:2000 ≒ Unicode 3.0）
 現在のほぼすべてのOSでは、フォントセットの切り替えによって、表示に使う文字集合を切り替えられる。
 現在のほぼすべてのOSでは、さまざまな文字符号化方式（エンコーディング）に対応している。
 Microsoft WindowsのShift_JISの独自拡張だったNEC特殊文字は、現在ではJIS X 0213:2000において、同一面区点の位置に登録されている。また、iモードのShift_JISにおいてはNEC特殊文字はMicrosoft WindowsのShift_JISと同様のコードポイントで利用可能である。
 JIS X 0213:2004の一部の文字などは公的規格の文字にもかかわらず、使える機種がWindows Vista以降搭載のPC等、一部の機種に限られてしまうという実情がある（この中には常用漢字の一部も含まれる）。

機種依存などの理由による文字の誤表示の各ケース 
文字が正しく表示できないことについては、次の二つの観点で語ることができる。

どのように表示されたか
 「〓（ゲタ）」「・（中黒）」「□（四角、豆腐）」等の文字に置換されて表示された。
 全く異なる別の文字として表示（文字化け）された。
なぜ表示できなかったのか
 表示しようとしている文字がフォントセットの中に用意されていない。
 データ自体と表示設定とで文字符号化方式（エンコーディング）が違う。
 システム固有の登録文字を他システムで表示しようとしている。

「〓（ゲタ）」「・（中黒）」「□（四角、豆腐）」等の文字に置換されて表示された場合というのは、大抵の場合、符号化方式は一致しているものの、フォント集合を表示側のシステムが用意していないときである。

別の文字として表示（文字化け）された場合というのは、符号化方式が違うか、システム固有の登録文字を他システムで表示しようとしているときである。

この中で、フォント集合を表示側のシステムが用意していない場合と、特定のシステムに固有の登録文字を他システムで表示しようとしている場合が「機種依存」であるとされる。

使用するフォントに依存する場合 
使用するフォントの相違によって、テキストデータ中の特定の文字が意図しない字形として表示されたり、全く表示・印刷できなくなる場合もある。
 かつてオペレーティングシステムごとに標準規格の未定義コードポイントなどに独自の文字を定義していたが、オープン化によって共通の文字集合を利用するようになると既存のテキストの一部の文字が全く表示・印刷できない事態が発生する。たとえばUnicodeに対応した結果、標準規格になかった文字がUnicodeに収録されず、表示・印刷ともできなくなる。
 標準規格の私用領域（いわゆる外字の領域）を用いて特定の処理系やアプリケーションのための文字や字形を表現したため、異なるシステムでは異なる文字として表示される。たとえば、マイクロソフトの韓国語版WindowsではからUnicodeへのマッピングに際して古ハングルなどの字形を私用領域に割り当てていたが、私用領域を別の用途に使っているシステムでは正しく表示できない。
 文字コード規格の改訂によって、例示字形があらためられたもの。たとえば、JIS X 0208の第2次規格（1983年）では複数の異体字関係にある文字同士のコードポイントが入れ替えられた。またJIS X 0213の第2次規格（2004年）では一部の文字の例示字形が印刷標準字体にあらためられた。いずれも、テキストデータとフォントの双方で前提とする規格を一致させなければ意図した表示にならない。
 フォント製造者の実装によって異なる字形が表示されるもの。例として円記号問題がある。
 OpenTypeのfont-feature-settingsタグを使用した字形変更でもこうした例は見られる。たとえば、数字の「0」をベースにした字形変更をこのタグで表示する場合、同じ値を指定してもフォントによって表示される文字が異なることがある。

使用するソフトウェアに依存する場合 
使用するソフトウェアによって、同じフォントを使用しても特定の文字が意図しない字形として表示される場合がある。主に文字合成を必要とするものに見られ、例えばアイヌ語のカタカナの1つ「」や、鼻濁音の「」などが挙げられる。