アットウィキロゴ

MyPage > Java


リクエストパラメータの文字化け(2007/11/23)


サーブレットAPI2.3よりsetCharacterEncodingの追加
http://www.atmarkit.co.jp/fjava/onepoint/svltjsp/svltjsp12.html

しかし、単純に使用すればよいという問題ではないようである。
http://www.atmarkit.co.jp/fjava/onepoint/svltjsp/svltjsp12.html

request.setCharacterEncoding("Windows-31J");
String val = request.getParameter("name");
if(request.getMethod.equals("GET")){
    val = new String(val.getBytes("8859_1"),"Windows-31J");
}

POSTのときのクエリ文字列が文字化けするかも、ということです。


javaのコンパイルについての考察(2007/07/24)


例えば、こういうクラスがあったときに、
public class HelloWorld {
	public static void main(String args[]){
		TypeTest.hello();
	}
}

TypeTestクラスの実装によりHelloWorldのバイトコードは異なってきます。
(その1)
public class TypeTest {
static void hello(){
	System.out.println("Hello");
}
}

(その2)
public class TypeTest {
	static int hello(){
		System.out.println("Hello");
		return 0;
	}
}

出来上がったクラスを
javap -v HelloWorld.class
してみれば一目瞭然。
TypeTestのhello()メソッドの引数を意識してコンパイルされていることがわかります。
ちなみに、HelloWorldクラスを下記のようにリフレクションを使って書き換えることで、
TypeTestのhello()メソッドに依存しないように書き換えることができます。

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class HelloWorld {
	public static void main(String args[]) throws Exception
	{
		// TypeTest.hello();
		Class cls = Class.forName("TypeTest");
		Method method = cls.getMethod("hello",null);
		Object ret = method.invoke(cls, null);
	}
}

※helloメソッドをpoblicにしないと駄目でしたorz

以下は参考にさせていただいた、もしくは関係するかも、なリンク集

クラスファイルのバージョンについてまとまっている
eclipseでのコンパイルについて
eclipseコンパイラ調査報告書、eclipseエディタ調査報告書(eclipse2.1ベース)
JREがあればeclipseは動く。eclipseが動けば、ecilpseのコンパイラでコンパイルできる。
最終更新:2007年11月23日 15:46