http://www.blogjava.net/xiaoyi/articles/298203.html
public
class
EscapeUnescape
{ public static String escape(String src) { int i; char j; StringBuffer tmp = new StringBuffer(); tmp.ensureCapacity(src.length() * 6 ); for (i = 0 ; i < src.length(); i ++ ) { j = src.charAt(i); if (Character.isDigit(j) || Character.isLowerCase(j) || Character.isUpperCase(j)) tmp.append(j); else if (j < 256 ) { tmp.append( " % " ); if (j < 16 ) tmp.append( " 0 " ); tmp.append(Integer.toString(j, 16 )); } else { tmp.append( " %u " ); tmp.append(Integer.toString(j, 16 )); } } return tmp.toString(); } public static String unescape(String src) { StringBuffer tmp = new StringBuffer(); tmp.ensureCapacity(src.length()); int lastPos = 0 , pos = 0 ; char ch; while (lastPos < src.length()) { pos = src.indexOf( " % " , lastPos); if (pos == lastPos) { if (src.charAt(pos + 1 ) == ' u ' ) { ch = ( char ) Integer.parseInt(src .substring(pos + 2 , pos + 6 ), 16 ); tmp.append(ch); lastPos = pos + 6 ; } else { ch = ( char ) Integer.parseInt(src .substring(pos + 1 , pos + 3 ), 16 ); tmp.append(ch); lastPos = pos + 3 ; } } else { if (pos == - 1 ) { tmp.append(src.substring(lastPos)); lastPos = src.length(); } else { tmp.append(src.substring(lastPos, pos)); lastPos = pos; } } } return tmp.toString(); } public static void main(String[] args) { String tmp = " 中文 " ; System.out.println( " testing escape : " + tmp); tmp = escape(tmp); System.out.println(tmp); System.out.println( " testing unescape : " + tmp); System.out.println(unescape( " %u6211%u4eec " )); } }
以上为一个工具类,为解决中文乱码
html前台:escape(escape('你好'))
后台:String txt=EscapeUnescape.unescape(aStringText);
escape本身参数编码为ISO8859-1,escape中文传替给servlet会直接为null接收不到,经过以上特殊处理即可解决!其他方法也可,如:手动转码...