import java.net.URLEncoder;

public class Test {
    // %E5 %E4 %F6 %C5 %C4 %D6 == åäöÅÄÖ
    // 229 228 246 197 196 214 == åäöÅÄÖ
    public static String encode(String s) {
	s = URLEncoder.encode(s);
	StringBuffer buf = new StringBuffer(s.length());
	int length = s.length();
	for (int i=0; i < length; i++) {
	    char c = s.charAt(i);
	    if (c == '%') {
		int charval = Integer.parseInt(s.substring(i+1, i+3), 16);
		switch (charval) {
		case 0xE5:
		case 0xE4:
		case 0xF6:
		case 0xC5:
		case 0xC4:
		case 0xD6:
		    buf.append((char) charval);
		    i += 2;
		    break;
		default:
		    buf.append(c);
		    break;
		}
	    } else {
		buf.append(c);
	    }
	}
	return buf.toString();
    }


    public static void main(String[] argv) {
	System.out.println(encode("puffo&miffoÅÄÖ%&åäömiffo"));
    }
}
