Javaによるweb開発での文字コード指定箇所まとめ
とりあえずまとめてみた、社内勉強会用でもあるかも。
javadocの文字コード
javadocコマンドで生成されるHTMLファイルの文字コード
Antのjavadocタスクの場合は次の通り、docencodingで指定する。
encodingはソースファイル(java)の文字コード。
HTTPリクエストからパラメータを取得する際の文字コード
HttpServletRequest#setCharacterEncoding(String code)を使用
GETパラメータとPOSTパラメータ両方扱う場合は注意する。
servletで次の通り指定する。
// setCharacterEncodingはリクエスト本体にのみ摘要される(POST) request.setCharacterEncoding("Windows-31J"); String val = request.getParameter("name"); // GETの場合は変換してやる if(request.getMethod.equals("GET")){ // servletのデフォルトエンコードはISO-8859_1なので、再度ISO-8859_1でバイトシーケンスに符号化 // バイトシーケンスをWindows-31Jで複合化してやる val = new String(val.getBytes("ISO-8859_1"),"Windows-31J"); }
server.xmlのConnector要素で、useBodyEncodingForURI属性をtrueに設定するとGETパラメータもsetCharacterEncodingで指定したエンコードで取得できる。
HTTPレスポンスヘッダの文字コード
JSPの場合
<%@ page contentType="text/html; charset=Shift_JIS"%>
servletに書く場合
HttpServletResponse#setContentType(String contenttype) を使用
response.setContentType("text/html; charset=Shift_JIS")
Apacheのデフォルト設定はhttpd.confに記述。
無効化する場合はコメントアウトしておく。
AddDefaultCharset ISO-8859-1
注意:実際はWindows-31Jであっても、Windows-31JはIEが認識できないためShift_JISとする。
参考:そろそろ UTF-7 について一言いっとくか - 葉っぱ日記
http://d.hatena.ne.jp/hasegawayosuke/20070717/p1
(X)HTMLによる文字コード指定
head要素内に次の通り記述
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
ページ表示時にはHTTPレスポンスヘッダの方が優先されるが
ローカルに保存して表示した場合にこちらが使用される。
DBの文字コード指定
select * from v$nls_parameters where parameter = 'NLS_CHARACTERSET'
画面出力時の文字コードと異なる場合はコードポイント変換処理が必要。
その他
String#getBytes()
OSのデフォルト文字エンコーディングが使用されるため、使用禁止
String#getBytes(String charsetName)
必ず本番環境の文字セット名を指定してこちらを使う
テスト用文字列
;/?:@&=+$%-_!~*{}[].,()"あa^# ' 〜‖−¢£¬£¢¥