hagino3000's blog

平成アーカイブス (更新停止)

Javaによるweb開発での文字コード指定箇所まとめ

とりあえずまとめてみた、社内勉強会用でもあるかも。

ソースファイル(.java)の文字コード

コンパイル時に指定する。
Antのjavacタスクの場合は次の通り


encodingの指定が無い場合、システムデフォルトのエンコーディングが使用される。

javadoc文字コード

javadocコマンドで生成されるHTMLファイルの文字コード
Antのjavadocタスクの場合は次の通り、docencodingで指定する。
encodingはソースファイル(java)の文字コード


JSPファイルの文字コード

jspファイルに次の通り記述する。

<%@ page language="java" pageEncoding="Windows-31J" %>

JSPページ読み込み時の文字コードjspservlet変換時に使用される。

JSPから生成するservletファイルの文字コード

web.xmlに次の通り記述する。


  javaEncoding
  Windows-31J 

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-31JIEが認識できないため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の文字コード指定

Oracleの場合は次のSQLで確認

select * from v$nls_parameters where parameter = 'NLS_CHARACTERSET'

画面出力時の文字コードと異なる場合はコードポイント変換処理が必要。

その他

String#getBytes()
OSのデフォルト文字エンコーディングが使用されるため、使用禁止

String#getBytes(String charsetName)
必ず本番環境の文字セット名を指定してこちらを使う

テスト用文字列

;/?:@&=+$%-_!~*{}[].,()"あa^# '
〜‖−¢£¬£¢¥