続・ruby 1.9 における文字列のエンコーディング
エンコーディング情報を表す Encoding クラスを定義する encoding.c を読んでみた。
対応している符号化方式のリストは、クラスメソッド Encoding#name_list で配列として得ることが出来る。Encoding クラスインスタンスの配列が欲しいときは、Encoding.list を使う。
ruby 1.9.1-p0 における対応は以下のようになっていた。
646 | ANSI_X3.4-1968 | ASCII | ASCII-8BIT |
BINARY | Big5 | CP437 | CP737 |
CP775 | CP850 | CP852 | CP855 |
CP857 | CP860 | CP861 | CP862 |
CP863 | CP864 | CP865 | CP866 |
CP869 | CP874 | CP878 | CP932 |
CP936 | CP949 | CP950 | CP1250 |
CP1251 | CP1252 | CP1253 | CP1254 |
CP1255 | CP1256 | CP1257 | CP1258 |
CP51932 | CP65000 | CP65001 | EUC-CN |
EUC-JP | EUC-KR | EUC-TW | Emacs-Mule |
GB12345 | GB18030 | GB1988 | GB2312 |
GBK | IBM437 | IBM737 | IBM775 |
IBM850 | IBM852 | IBM855 | IBM857 |
IBM860 | IBM861 | IBM862 | IBM863 |
IBM864 | IBM865 | IBM866 | IBM869 |
ISO-2022-JP | ISO-2022-JP-2 | stateless-ISO-2022-JP | ISO2022-JP |
ISO2022-JP2 | ISO-8859-1 | ISO-8859-2 | ISO-8859-3 |
ISO-8859-4 | ISO-8859-5 | ISO-8859-6 | ISO-8859-7 |
ISO-8859-8 | ISO-8859-9 | ISO-8859-10 | ISO-8859-11 |
ISO-8859-13 | ISO-8859-14 | ISO-8859-15 | ISO-8859-16 |
ISO8859-1 | ISO8859-2 | ISO8859-3 | ISO8859-4 |
ISO8859-5 | ISO8859-6 | ISO8859-7 | ISO8859-8 |
ISO8859-9 | ISO8859-10 | ISO8859-11 | ISO8859-13 |
ISO8859-14 | ISO8859-15 | ISO8859-16 | KOI8-R |
KOI8-U | MacJapan | MacJapanese | SJIS |
Shift_JIS | TIS-620 | UCS-2BE | UCS-4BE |
UCS-4LE | US-ASCII | UTF-16BE | UTF-16LE |
UTF-32BE | UTF-32LE | UTF-7 | UTF-8 |
UTF-8-MAC | UTF8-MAC | Windows-31J | Windows-874 |
Windows-1250 | Windows-1251 | Windows-1252 | Windows-1253 |
Windows-1254 | Windows-1255 | Windows-1256 | Windows-1257 |
Windows-1258 | csWindows31J | euc-jp-ms | eucCN |
eucJP | eucJP-ms | eucKR | eucTW |
external | internal | locale | macCentEuro |
macCroatian | macCyrillic | macGreek | macIceland |
macRoman | macRomania | macThai | macTurkish |
macUkraine |
対応する符号化方式には別名が割り当てられている物があり、上のリストにはそれらも含まれているようだ。別名のリストはクラスメソッド Encoding.aliases でハッシュリストとして得ることが出来る。
別名 | 符号化方式 |
---|---|
BINARY | ASCII-8BIT |
CP437 | IBM437 |
CP737 | IBM737 |
CP775 | IBM775 |
IBM850 | CP850 |
CP857 | IBM857 |
CP860 | IBM860 |
CP861 | IBM861 |
CP862 | IBM862 |
CP863 | IBM863 |
CP864 | IBM864 |
CP865 | IBM865 |
CP866 | IBM866 |
CP869 | IBM869 |
CP1258 | Windows-1258 |
CP950 | Big5 |
eucJP | EUC-JP |
euc-jp-ms | eucJP-ms |
eucKR | EUC-KR |
eucTW | EUC-TW |
EUC-CN | GB2312 |
eucCN | GB2312 |
CP936 | GBK |
ISO2022-JP | ISO-2022-JP |
ISO2022-JP2 | ISO-2022-JP-2 |
ISO8859-1 | ISO-8859-1 |
CP1252 | Windows-1252 |
ISO8859-2 | ISO-8859-2 |
CP1250 | Windows-1250 |
ISO8859-3 | ISO-8859-3 |
ISO8859-4 | ISO-8859-4 |
ISO8859-5 | ISO-8859-5 |
ISO8859-6 | ISO-8859-6 |
CP1256 | Windows-1256 |
ISO8859-7 | ISO-8859-7 |
CP1253 | Windows-1253 |
ISO8859-8 | ISO-8859-8 |
CP1255 | Windows-1255 |
ISO8859-9 | ISO-8859-9 |
CP1254 | Windows-1254 |
ISO8859-10 | ISO-8859-10 |
ISO8859-11 | ISO-8859-11 |
CP874 | Windows-874 |
ISO8859-13 | ISO-8859-13 |
CP1257 | Windows-1257 |
ISO8859-14 | ISO-8859-14 |
ISO8859-15 | ISO-8859-15 |
ISO8859-16 | ISO-8859-16 |
CP878 | KOI8-R |
SJIS | Shift_JIS |
CP932 | Windows-31J |
csWindows31J | Windows-31J |
MacJapan | MacJapanese |
ASCII | US-ASCII |
ANSI_X3.4-1968 | US-ASCII |
646 | US-ASCII |
CP65000 | UTF-7 |
CP65001 | UTF-8 |
UTF-8-MAC | UTF8-MAC |
UCS-2BE | UTF-16BE |
UCS-4BE | UTF-32BE |
UCS-4LE | UTF-32LE |
CP1251 | Windows-1251 |
locale | Windows-31J |
external | Windows-31J |
locale/external については、多分環境にあった符号化方式が選択されるんだろう。
iconv みたいな変換ライブラリと比較したわけではないけど、対応する符号化方式数が意外にも結構あることに驚いた。通常の利用に当たっては不自由しない程度の種類だと思う。