ウェブページの文字コード(もう少し詳しく)

実際にウェブページで用いられている文字コードについて,もう少し詳しく調べてみました.調べた内容は,HTTP レスポンスヘッダに記述されている charset,本文の先頭にある BOM(Byte Order Mark),XML 宣言(<?xml?>)の encoding,META タグ(<meta>)を使って指定されている charset に加えて,iconv による utf-8 への変換に成功した文字コードの組み合わせです.

文書数 ヘッダ BOM XML 宣言 META タグ 変換成功 補足 ※
114426 - - - shift_jis shift_jis ok
83328 utf-8 - - utf-8 utf-8 ok
46140 - - - utf-8 utf-8 ok
35727 euc-jp - - euc-jp euc-jp ok
35352 - - - euc-jp euc-jp ok
20851 shift_jis - - shift_jis shift_jis ok
18029 - - - shift_jis cp932 特殊文字・拡張文字
15943 - - - - cp932 指定なし
11808 - - - x-sjis cp932 表記ミス,特殊文字・拡張文字
9680 utf-8 - utf-8 utf-8 utf-8 ok
8431 - - utf-8 utf-8 utf-8 ok
6939 euc-jp - - euc-jp euc-jp-ms 特殊文字・拡張文字
6303 - - shift_jis shift_jis shift_jis ok
5559 windows-31j - - shift_jis windows-31j 複数指定
4629 euc-jp - euc-jp euc-jp euc-jp ok
3494 utf-8 - - - utf-8 ok
3070 - utf-8 - utf-8 utf-8 ok
3049 shift_jis - shift_jis shift_jis shift_jis ok
2884 - - - euc-jp euc-jp-ms 特殊文字・拡張文字
2814 shift_jis - - - shift_jis ok
2548 shift_jis - - shift_jis cp932 特殊文字・拡張文字
1754 euc-jp - - - euc-jp ok
1626 - - euc-jp euc-jp euc-jp ok
1554 utf-8 utf-8 - utf-8 utf-8 ok
1363 - - - euc-jp - 変換失敗
1243 - - - shift-jis shift-jis 表記ミス
1187 - - - shift_jis - 変換失敗
993 - - - utf-8 - 変換失敗
984 - - - - euc-jp-ms 指定なし
934 - - - iso-2022-jp iso-2022-jp ok
915 utf-8 - - utf-8 - 変換失敗
907 shift-jis - - shift_jis shift-jis 表記ミス
853 - - - x-euc-jp euc-jp-ms 表記ミス,特殊文字・拡張文字
831 euc-jp - euc-jp euc-jp euc-jp-ms 特殊文字・拡張文字
781 windows-31j - shift_jis shift_jis windows-31j 複数指定
757 none - - shift_jis shift_jis 不審なヘッダ
653 sjis - - shift_jis sjis 表記ミス
643 - - shift_jis shift_jis cp932 特殊文字・拡張文字
633 euc-jp - - euc-jp - 変換失敗
596 shift_jis - - shift-jis shift_jis 表記ミス
566 - - - gb2312 - 変換失敗
547 - - - gb2312 gb2312 中国語
466 cp943c - - shift_jis shift_jis 表記ミス
465 ms932 - - shift_jis ms932 表記ミス,複数指定
459 - - - big5 big5 中国語
441 euc-jp - - x-euc-jp euc-jp 表記ミス
433 - - - - - 指定なし,変換失敗
431 utf-8 - utf-8 utf-8 - 変換失敗
408 utf8 - - utf-8 utf-8 表記ミス
405 shift_jis - shift_jis shift_jis cp932 特殊文字・拡張文字
404 windows-31j - - windows-31j windows-31j ok
380 euc-jp - - - euc-jp-ms 特殊文字・拡張文字
377 none - - euc-jp euc-jp 不審なヘッダ
364 shift_jis - - - cp932 特殊文字・拡張文字
354 iso-2022-jp - - iso-2022-jp iso-2022-jp ok
354 shift_jis - - x-sjis shift_jis 表記ミス
351 - - - gbk gbk 中国語
340 utf-8 - - shift_jis utf-8 複数指定
339 shift_jis - - sjis shift_jis 表記ミス
329 x-euc-jp - - x-euc-jp euc-jp-ms 表記ミス,特殊文字・拡張文字
301 utf-8 - utf-8 - utf-8 ok
288 - - - big5 - 変換失敗
281 utf8 - utf-8 utf-8 utf-8 表記ミス
272 - - - euc-kr euc-kr 韓国語
254 - - - x-sjis - 変換失敗
239 windows-31j - - - windows-31j ok
228 shift_jis - - shift_jis - 変換失敗
211 iso-2022-jp - - - iso-2022-jp ok
199 cp943c - shift_jis shift_jis shift_jis 表記ミス,複数指定
198 none - - utf-8 utf-8 不審なヘッダ
191 shift_jis - - euc-jp shift_jis 複数指定
183 - - shift_jis - shift_jis ok
173 sjis - shift_jis shift_jis sjis 表記ミス
169 none - shift_jis shift_jis shift_jis 不審なヘッダ
156 - utf-8 - - utf-8 ok
150 euc-jp - euc-jp euc-jp - ok
145 none - - shift_jis cp932 不審なヘッダ,特殊文字・拡張文字
144 - - euc-jp euc-jp euc-jp-ms 特殊文字・拡張文字
143 gbk - - gbk gbk 中国語
138 - utf-8 - utf-8 - 変換失敗
136 euc-jp - - shift_jis euc-jp 複数指定
133 euc_jp - - euc-jp euc-jp 表記ミス
128 shift-jis - - shift-jis shift-jis 表記ミス
127 none - - - cp932 不審なヘッダ,指定なし
126 shift_jis - - windows-31j shift_jis 複数指定
121 - - - sjis sjis 表記ミス
119 utf-8 - - iso-8859-1 utf-8 複数指定
117 gb2312 - - gb2312 - 変換失敗
114 shift_jis - - shift-jis cp932 表記ミス,特殊文字・拡張文字
113 euc-jp - euc-jp - euc-jp ok
108 shift_jis - - utf-8 shift_jis 複数指定
103 big5 - - big5 - 変換失敗
102 - - - iso-2022-jp iso-2022-jp-ms 特殊文字・拡張文字
101 shift-jis - - - shift-jis 表記ミス
99 big5 - - big5 big5 中国語
98 utf-8 - - euc-jp utf-8 複数指定
97 cswindows31j - - shift_jis cswindows31j 複数指定
97 jis - - iso-2022-jp iso-2022-jp 表記ミス
96 shift_jis - shift_jis - shift_jis ok
95 euc-jp - - euc_jp euc-jp 表記ミス
  • ※ 補足について
    • ok:特に問題なさそうなもの
    • 特殊文字・拡張文字:cp932, eucjp-ms, iso-2022-jp-ms に切り替えることで変換できたもの
    • 指定なし:文字コードの指定が見当たらないもの
    • 表記ミス:なんとなく分かるけれど,IANA には未登録な文字コードが指定されているもの
    • 複数指定:複数の文字コードが指定されているもの(euc-jp, shift_jis, utf-8 が混ざっているものは危険)
    • 変換失敗:指定されている文字コードに加えて cp932, eucjp-ms, iso-2022-jp-ms, utf-8 を試しても変換できなかったもの
    • 不審なヘッダ:ヘッダで指定されている charset が怪しいもの

# 後になって気づいたのですが,cp932 のところは windows-31j で置き換えた方が良さそうです.

文字コードのバージョンについて

shift_jis, euc-jp, iso-2022-jp については,どのバージョンを想定しているのか分からないという問題があります.文字コードのバージョンを気にする人は少数派でしょうし,バージョンを指定する妥当な手段もないのが現状だと思います.

独自拡張を含む文字集合に対する文字コードwindows-31j はあるけど,windows-31j に対応する euc-jp, iso-2022-jp の拡張版)や JIS X 0213:2004(JIS2004)に対応した文字コードを使いたいとき,どうすれば良いのか分かりません.

なんとなく思ったこと

x-sjis や x-euc-jp があるところにウェブの歴史を感じます.

XML 宣言はあまり信用できません.なぜならば,XML 宣言の付いた HTML 文書がそれなりにあるからです.スクリプトの内容は CDATA セクションに記述するべきじゃないのかな,なんて考える段階にすら至っていないものも….HTML として処理するか XHTML として処理するかの違いによって表示が変わるので,中途半端な XHTML の扱いには困ります.