HTTP レスポンスヘッダの Content-Type に現れる charset

BeautifulSoup の文字コード判定が HTTP レスポンスヘッダを使っていないことに思い至って,50 万件くらいのウェブページから,HTTP レスポンスヘッダの Content-Type に指定されている charset(いわゆる文字コード)を抜き出してみました.

結果は以下の通りです.1 列目が頻度,2 列目が charset(小文字に統一),3 列目が IANA の Character Sets(http://www.iana.org/assignments/character-sets)に含まれているかどうか,4 列目が iconv -l(Ubuntu 同梱版)に含まれているかどうかを示しています.

Frequency Charset IANA iconv
102076 utf-8 ok ok
52691 euc-jp ok ok
32933 shift_jis ok ok
7153 windows-31j ok ok
2302 none - -
1762 iso-8859-1 ok ok
1369 shift-jis - ok
970 sjis - ok
696 utf8 - ok
682 cp943c - -
641 ms932 - ok
637 iso-2022-jp ok ok
478 x-euc-jp - -
274 gb2312 ok ok
251 gbk ok ok
248 euc_jp - -
224 big5 ok ok
127 x-sjis - -
108 "euc-jp" - -
102 jis - -
97 cswindows31j ok ok
82 euc - -
75 auto - -
73 "utf-8" - -
72 ※1 - -
70 euc-kr - ok
70 iso-8858-1 - -
55 nl - -
46 sjis-win - ok
38 ja - -
38 shuft_jis - -
34 (sjis) - -
32 0 - -
32 eucjp-open - ok
23 "shift_jis" - -
23 ks_c_5601-1987 - -
21 us-ascii ok ok
7 auto-detect - -
7 x-ms950-hkscs - -
5 null - -
4 charset=utf-8 - -
4 iso8859-1 - ok
4 no ok ok
4 shift.jis - -
4 unknown - -
3 euc-jp ※2 - -
3 big-5 - ok
3 euc_kr - -
3 iso-2202-jp - -
3 iso8859_1 - -
3 ms949 - -
3 no value - -
3 pass - -
3 sjis_0208 - -
3 sjis_jp - -
3 x-euc - -
3 zh-cn - -
2 "" - -
2 'shift_jis' - -
2 (off/euc-jp/shift_jis) - -
2 big5-hkscs ok ok
2 euc_-jp - -
2 eucjp-win - ok
2 gb18030 ok ok
2 ms950 - -
2 out_encode - -
2 s-jis - -
2 shfit_jis - -
2 shif_jis - -
2 shifjis - -
2 shift_sjis - -
2 sift_jis - -
2 tis-620 ok ok
2 utf-8n - -
2 windows-1251 ok ok
2 “shift-jis″※3 - -
2 utf-8″※3 - -
2 utf-8″※4 - -
1 -8 - -
1 _charset - -
1 charset=euc-jp - -
1 content_chars - -
1 cp932 - ok
1 ecu-jp - -
1 euc-jp, text/html - -
1 euc-jp,shift_jis,iso-2022-jp - -
1 eucjp - ok
1 gb-2312 - -
1 gbk,utf-8 - -
1 iso-20022-jp - -
1 iso-2022 - -
1 iso-8859 - -
1 koi8-r ok ok
1 off(shift-jis) - -
1 shft_jis - -
1 shif-jis - -
1 shift_jis,euc-jp,iso-2022-jp - -
1 shiftjis - -
1 shit-jis - -
1 ujis - ok
1 urf-8 - -
1 utr-8 - -
1 x-sjis-jp - -

※ 1. 空文字列でした.

※ 2. "|euc-jp" でした.

※ 3. Shift_JIS の全角ダブルクォートでした.

※ 4. UTF-8 の全角ダブルクォートでした.

レスポンスヘッダに charset を含めていないページの方が多いようです.charset の指定があるページについては,案の定,UTF-8, EUC-JP, Shift_JIS が上位を占めています.Windows-31JShift_JIS の拡張版)が 4 位になっているのは少し意外でした.

そして,不可思議なのが 5 位に現れる none です.他にも,auto, nl, ja, 0, auto-detect, null, unknown, no value, pass などの怪しい charset や,複数の charset を並べたものが登場しますが,none の頻度は圧倒的です.

他には,不要な記号がついているもの,表記揺れ(`-' と `_'),typo が少しあるようです.設定を間違えても動くというのは,便利なのですが,悩ましい問題ですね.