文字コードに指定できるものって?

文字コードを指定します」、「エンコードを指定します」とかよく言うけど、そこに指定できるものって何なんだろう?

HTMLのメタタグ
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=Window-31J">
</head>

(↑HTMLのmetaタグにWindows-31Jとかあんまり見ないか。おかしい?)

JSPのpageディレクティブ
<%@ page contentType="text/html; charset=Windows-31J" %>
サーブレットとかで
req.setCharacterEncoding("Windows-31J");
PrintWriter out =
    new PrintWriter(
        new OutputStreamWriter(
            res.getOutputStream(), "Windows-31J"));

IANA登録名

しらべて見ると、使えるのは、以下のもののようです。

  • IANAの登録名
  • 各ツールの方言(ブラウザ固有、Java固有)

なお、IANAのルールでは、大文字、小文字は区別されないので大文字でも小文字でも使えます。


参考:

IANA Charset Registry
http://www.iana.org/assignments/character-sets

RFC 2278: IANA Charset Registration Procedures
http://ietf.org/rfc/rfc2278.txt

Java サポートされているエンコーディング
http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/intl/encoding.doc.html

Java Charset
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/nio/charset/Charset.html

Shift_JIS

よく話題になってややこしいのが、Shift_JIS


シフトJISShift_JIS
http://www.atmarkit.co.jp/aig/01xml/shiftjis.html

IANAには、"Shift_JIS"という名前でシフトJISが登録されている。
...
マイクロソフトが使用しているシフトJISは、Windows文字セットと呼ばれるもので、多数の拡張文字を含む。これは、シフトJISの一種ではあるが、"Windows-31J"や"CP932"という名前で呼ばれ、通常のシフトJISとは別枠で扱われる場合もある


Javaの文字化け対策FAQ
http://www.atmarkit.co.jp/fjava/rensai3/mojibake02/mojibake02.html

このWindows-31Jは、以下のようなWindows固有の機種依存文字を含んでいるのが特徴だ


つまり、こういうことか。

JavaShift_JISWindows-31J

さらにJavaの場合は、JDK 1.4.1前後で、「Shift_JIS」と指定したときに実際に使われる文字コードが異なっているので注意が必要(JSPサーブレットではShift_JISよりWindows-31Jがベター)。


コラム:Windows-31Jの使用
http://www.atmarkit.co.jp/fjava/rensai2/eclipse03/eclipse03.html

今まで、Windows環境で使うJava(JSP)コードでは、雑誌やWebの紹介記事でShift_JISが使われていたこともあり、殆どのケースでShift_JISを利用していたと思います。ここでエンコーディング名としてWindows-31Jを使う理由は、Shift_JISの扱いが、J2SDK 1.4.1のリリースを境に変更になっているからです。

文字コード

(IANA登録名)
CP932

Windows-31J
シフトJIS

Shift_JIS
J2SDK 1.4.0以前 Windows-31J(MS932)
Shift_JIS
SJIS
J2SDK 1.4.1以降 Windows-31J(MS932)
Shift_JIS

SJIS

うーん、とりあえず、HTMLもJSPサーブレットも「Windows-31J」でいいのかなー?