続・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 みたいな変換ライブラリと比較したわけではないけど、対応する符号化方式数が意外にも結構あることに驚いた。通常の利用に当たっては不自由しない程度の種類だと思う。