escapeunescape.java

来自「解决汉字出现乱码的终极解决办法」· Java 代码 · 共 70 行

JAVA
70
字号
package accp;


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("%u4f60%u597d"));   
	    }   
	}  

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?