文字コード(もじコード、英: character code)は、文字(キャラクタ)を通信やコンピュータで扱えるように、一文字一文字に固有の識別番号を与えて区別できるようにした、その対応関係についての規則のこと。
文字コードは、文字や記号やそれに類するものを、通信やコンピュータで扱うために、各文字や記号などに対して番号を与えた対応規則の体系である。通常、通し番号を与え、文字と番号の対応表が作成される。どの文字コードを使うか決まっている状況では、ある数(番号)が与えられるとそれに対応する文字や記号を特定することができる。
1870年代にはフランスの電信技術者のエミール・ボドーが、5ビットと文字・記号類を対応させるコードを発明し、1876年に、そのコードを用いる電信装置の特許をフランスで取得した(この装置に使われている5ビットのコードがBaudot Code(ボドー・コード)として知られるようになった)。
1963年には、アメリカの情報通信用の文字コードとして7ビットのASCII(アスキー、英: American Standard Code for Information Interchange の略)がアメリカ規格協会(ASA)で制定された。1964年にはIBM社がSystem/360とともにEBCDICという文字コード、4ビットのBCDを8ビットに拡張した文字コードを発表した。
Unicode文字符号化モデルでは、文字コードは以下の4段階に分けられる。
その後、バイト列をgzipなどで圧縮したり、7ビット伝送路に通すためBase64、uuencode、BinHex、Quoted-printableなどで変換することがあるがこれらは文字コードの範囲外である。
外字とは表外字(規格表の外の文字)の略であり、ユーザがデザインして用いるユーザ定義文字や、メーカーなどが定義した環境依存文字(いわゆる機種依存文字)もしくはベンダ拡張漢字のことを指す。
外字というユーザが独自に文字を登録できる領域がある文字コードは複数存在する。Unicodeにおいては6,400+131,072文字の「PUA(Private Use Area=私用領域)」があり、Windows-31J(Microsoft Windows Codepage 932)にも1,880文字の外字領域がある。ユーザが独自にフォントを登録した文字(ユーザ定義文字)は、文書の交換時に配慮しない限りは他の環境で読むことができないため、互換性の上で重大な問題を引き起こす場合がある。ベンダ拡張文字の場合は、ユーザが表外字でないことを認識せずに利用してしまうことがあるため、より重大な問題を引き起こす(例として挙げれば、Windows環境(CP932)のローマ数字がMac環境では化けて表示されるなど)。
JIS規格においては、JIS X 0208で定義された文字集合に対してEUC-JPまたはShift_JISによる符号化を行う際、1〜94区に対応しない領域(EUC-JPやShift_JISでは94区に94点をかけた8,836を超える文字が定義可能であるため)や、1〜94区の範囲内であっても文字が定義されていない箇所(JIS X 0208には、そのような空き領域が複数存在している)に外字を入れる実装が存在した。1997年改正(JIS X 0208:1997)ではShift_JIS符号化およびEUC-JP符号化も規格で規定することにより、空き領域を外字として使用することが原則禁止された。またJIS X 0213:2000では、主要なベンダ外字の文字を規格に入れて94区までの空き領域をなくしたことで、94区までの区間内の外字を扱える箇所をなくし、2面を使用した実装水準4を選択する場合にはShift_JIS-2004符号化の場合、94区外の領域も埋まるため、外字を入れることが可能な領域がなくなった。
1バイト系文字コードは、俗に「半角文字」と呼ばれることもある。
2バイト系文字コードは、俗に「全角文字」と呼ばれることもある。
印刷業界においては、公的な文字コード規格では包摂されている異体字やグリフの相違を厳密に区別したいというニーズが強く存在する。そのため、そのようなニーズに応える文字集合が企業主導で策定されている。一般的な情報交換に用いられることはない。
以下は、主にメインフレーム・オフコンなどのプロプライエタリな古いレガシーコンピュータやレガシーなシステム、特殊な環境において利用される文字コードを含む。レガシーなものとの連携を目的とする場合を除き、パソコンで利用されることがないものが多い。
Owlapps.net - since 2012 - Les chouettes applications du hibou