主要な日本文字の文字コードとMIME名

2004.08.22新規作成(1999.01.31の日記に加筆・修正)。2005.4.2加筆。

HTTPプロトコルなどで指定する文字コードのうち、日本語を扱えるメジャーなものを列挙する。

Content-Type: text/html; charset=EUC-JP

文字コードのMIME名はIANA CHARACTER SETSに書かれているものを使う。ただ、文字コードではないものが混ざっているので注意がいる。例えば JIS_C6220-1969-jp (JIS X 0201 片仮名用図形文字集合)など、通常単独では使われない符号化文字集合(coded character set; CCS)が含まれている。

CCSについては、次を参照;UTR#17: Character Encoding Model

JIS X 0211-1994 4.2.18、JIS X 0202:1998にも同じ定義がある。

符号化文字集合(coded character set)、符号(code)
文字集合を定め、かつ、その集合内の文字とビット組合せを1対1に関係付ける、あいまいでない規則の集合。

以下、IANA CHARACTER SETS(2004.02.06現在)から引用し、コメントを付ける。

Shift_JIS

Name: Shift_JIS (preferred MIME name)
MIBenum: 17
Source: This charset is an extension of csHalfWidthKatakana by adding graphic characters in JIS X 0208. The CCS's are JIS X0201:1997 and JIS X0208:1997. The complete definition is shown in Appendix 1 of JIS X0208:1997. This charset can be used for the top-level media type "text".
Alias: MS_Kanji
Alias: csShiftJIS

シフトJISのMIME名は「Shift_JIS」を使う。しかし内容はここに書かれているものは使えない。JIS X 0208:1997の「シフト符号化表現」では1バイト文字としてJIS X 0201ラテン文字用図形文字集合を使うことになっているが、本当にそのように実装すると、「¥」の扱いが困ったことになって実用的ではない。

EUC-JP

Name: Extended_UNIX_Code_Packed_Format_for_Japanese
MIBenum: 18
Source: Standardized by OSF, UNIX International, and UNIX Systems Laboratories Pacific. Uses ISO 2022 rules to select
code set 0: US-ASCII (a single 7-bit byte set)
code set 1: JIS X0208-1990 (a double 8-bit byte set) restricted to A0-FF in both bytes
code set 2: Half Width Katakana (a single 7-bit byte set) requiring SS2 as the character prefix
code set 3: JIS X0212-1990 (a double 7-bit byte set) restricted to A0-FF in both bytes requiring SS3 as the character prefix
Alias: csEUCPkdFmtJapanese
Alias: EUC-JP (preferred MIME name)

ISO-10646-J-1

Name: ISO-10646-J-1
Source: ISO 10646 Japanese, see RFC 1815.

ISO-10646-J-1は、Unicodeのうち、JIS X 0208などで定義されている文字だけを使える、というもの。実際にはこのMIME名は使われていないように思う。

Windows-31J

Name: Windows-31J
MIBenum: 2024
Source: Windows Japanese. A further extension of Shift_JIS to include NEC special characters (Row 13), NEC selection of IBM extensions (Rows 89 to 92), and IBM extensions (Rows 115 to 119). The CCS's are JIS X0201:1997, JIS X0208:1997, and these extensions. This charset can be used for the top-level media type "text", but it is of limited or specialized use (see RFC2278). PCL Symbol Set id: 19K
Alias: csWindows31J

通常、「シフトJIS」と言うとこちらのコードを指す。1バイト文字は、実際には、JIS X 0201ではなくISO/IEC 646 IRVを用いる。0x5cの字形は「¥」だが、内部的にはバックスラッシュと見なす。

ISO-2022-JP

Name: ISO-2022-JP (preferred MIME name) [RFC1468,Murai]
MIBenum: 39
Source: RFC-1468 (see also RFC-2237)
Alias: csISO2022JP

ISO/IEC 2022 (JIS X 0202) を参考にして規定された文字コード(しかしISO/IEC 2022には適合していない)。

ISO/IEC 2022は手短に言えば、エスケープシーケンスによって、(1) 94n文字集合または96n文字集合をG0, G1, G2およびG3という仮の領域に割り当て(指示する (to designate) という。)、(2) さらにこのいずれかを0x20〜0x7fに呼び出す。以降、この2段階の操作によって0x20〜0x7fに見えている文字を使用する。「JIS X 0202:1998 9. 7ビット符号の構造」を参照。

一方、ISO-2022-JPでは、エスケープシーケンスによって、ISO/IEC 646 IRV(国際基準版)、JIS X 0201ラテン文字集合、JIS X 0208(旧JIS)、JIS X 0208(現行)の4つの文字集合を切り替える。改行文字などの制御文字は、IRVまたはラテン文字集合が利用できる状態のときのみ使える。

複数バイト図形文字をG0に指示するESC 2/4 F(ESC 2/4 2/8 Fではない。)というエスケープシーケンスによって制御文字が利用禁止になってしまうところがISO/IEC 2022に適合しない。

エスケープシーケンス意味
1B 28 42ISO/IEC 646 IRVに切り替える
1B 28 4AJIS X 0201ラテン文字集合に切り替える
1B 24 40JIS X 0208(旧JISにするための所要の入れ替えを行ったもの)に切り替える
1B 24 42JIS X 0208に切り替える

ISO-2022-JP-2

Name: ISO-2022-JP-2 (preferred MIME name) [RFC1554,Ohta]
MIBenum: 40
Source: RFC-1554
Alias: csISO2022JP2

ISO-2022-JP-2はISO-2022-JPを拡張して日本語以外の文字も使えるようにしたものだが、メジャーではない。含んでいる文字集合は次のとおり。

                              94 character sets
      reg#  character set      ESC sequence                designated to
      ------------------------------------------------------------------
      6     ASCII              ESC 2/8 4/2      ESC ( B    G0
      42    JIS X 0208-1978    ESC 2/4 4/0      ESC $ @    G0
      87    JIS X 0208-1983    ESC 2/4 4/2      ESC $ B    G0
      14    JIS X 0201-Roman   ESC 2/8 4/10     ESC ( J    G0
      58    GB2312-1980        ESC 2/4 4/1      ESC $ A    G0
      149   KSC5601-1987       ESC 2/4 2/8 4/3  ESC $ ( C  G0
      159   JIS X 0212-1990    ESC 2/4 2/8 4/4  ESC $ ( D  G0

                              96 character sets
      reg#  character set      ESC sequence                designated to
      ------------------------------------------------------------------
      100   ISO8859-1          ESC 2/14 4/1     ESC . A    G2
      126   ISO8859-7(Greek)   ESC 2/14 4/6     ESC . F    G2

UTF-8

Name: UTF-8 [RFC3629]
MIBenum: 106
Source: RFC 3629
Alias: None

Unicodeを使う場合、通常はUTF-8を使う。