文字コードに指定できるものって?
「文字コードを指定します」、「エンコードを指定します」とかよく言うけど、そこに指定できるものって何なんだろう?
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。
シフトJIS(Shift_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固有の機種依存文字を含んでいるのが特徴だ
つまり、こういうことか。
- 「Shift_JIS」「Windows-31J」はIANAに登録されている
- MS932、CP932はWindows-31Jの別名
- Windows-31JはShift_JISの拡張でちょっと違う
JavaのShift_JISとWindows-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_JISSJIS J2SDK 1.4.1以降 Windows-31J(MS932)
Shift_JIS
SJIS
うーん、とりあえず、HTMLもJSPもサーブレットも「Windows-31J」でいいのかなー?