`
samyou
  • 浏览: 106266 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java下的 UTF-8编码

    博客分类:
  • java
阅读更多
public class UTFEncode 
{
	public static String encodeUTF8(String value) {
        try {
            int strlen = value.length();
            StringBuffer out = new StringBuffer();
            for (int i = 0; i < strlen; i++) {
                char t = value.charAt(i);
                int c = 0;
                c |= (t & 0xffff);
                if (c >= 0 && c < 0x80) {
                    switch (t) {
                    case '=':
                        out.append("%3d");
                    break;
                    case ' ':
                        out.append("%20");
                    break;
                    case '+':
                        out.append("%2b");
                    break;
                    case '\'':
                        out.append("%27");
                    break;
                    case '/':
                        out.append("%2F");
                    break;
                    case '.':
                        out.append("%2E");
                    break;
                    case '<':
                        out.append("%3c");
                    break;
                    case '>':
                        out.append("%3e");
                    break;
                    case '#':
                        out.append("%23");
                    break;
                    case '%':
                        out.append("%25");
                    break;
                    case '&':
                        out.append("%26");
                    break;
                    case '{':
                        out.append("%7b");
                    break;
                    case '}':
                        out.append("%7d");
                    break;
                    case '\\':
                        out.append("%5c");
                    break;
                    case '^':
                        out.append("%5e");
                    break;
                    case '~':
                        out.append("%73");
                    break;
                    case '[':
                        out.append("%5b");
                    break;
                    case ']':
                        out.append("%5d");
                    break;
                    default:
                        out.append(t);
                        break;
                    }
                }
                else if (c > 0x7f && c < 0x800) {
                    out.append("%");
                    out.append(byteArrayToHexString(new byte[] { (byte) (((c >>> 6) & 0x1f) | 0xc0) }));
                    out.append("%");
                    out.append(byteArrayToHexString(new byte[] { (byte) (((c >>> 0) & 0x3f) | 0x80) }));
                } else if (c > 0x7ff && c < 0x10000) {
                    out.append("%");
                    out.append(byteArrayToHexString(new byte[] { (byte) (((c >>> 12) & 0x0f) | 0xe0) }));
                    out.append("%");
                    out.append(byteArrayToHexString(new byte[] { (byte) (((c >>> 6) & 0x3f) | 0x80) }));
                    out.append("%");
                    out.append(byteArrayToHexString(new byte[] { (byte) (((c >>> 0) & 0x3f) | 0x80) }));
                } else if (c > 0x00ffff && c < 0xfffff) {
                    out.append("%");
                    out.append(byteArrayToHexString(new byte[] { (byte) (((c >>> 18) & 0x07) | 0xf0) }));
                    out.append("%");
                    out.append(byteArrayToHexString(new byte[] { (byte) (((c >>> 12) & 0x3f) | 0x80) }));
                    out.append("%");
                    out.append(byteArrayToHexString(new byte[] { (byte) (((c >>> 6) & 0x3f) | 0x80) }));
                    out.append("%");
                    out.append(byteArrayToHexString(new byte[] { (byte) (((c >>> 0) & 0x3f) | 0x80) }));
                }
            }
            return out.toString();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return "";
    }
/**
     * 
     * Convert a byte[] array to readable string format. This makes the "hex"
     * readable!
     * 
     * @return result String buffer in String format
     * 
     * @param in
     *            byte[] buffer to convert to string format
     */
    static String byteArrayToHexString(byte in[]) {
        byte ch = 0x00;
        int i = 0;
        if (in == null || in.length <= 0)
            return null;
        String pseudo[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
                "A", "B", "C", "D", "E", "F" };
        StringBuffer out = new StringBuffer(in.length * 2);
        while (i < in.length) {
            ch = (byte) (in[i] & 0xF0); // Strip off high nibble
            ch = (byte) (ch >>> 4);
            // shift the bits down
            ch = (byte) (ch & 0x0F);
            // must do this is high order bit is on!
            out.append(pseudo[(int) ch]); // convert the nibble to a String
                                            // Character
            ch = (byte) (in[i] & 0x0F); // Strip off low nibble
            out.append(pseudo[(int) ch]); // convert the nibble to a String
                                            // Character
            i++;
        }
        String rslt = new String(out);
        return rslt;
    }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics