java下的 UTF-8编码

转载 2012年03月30日 12:14:16
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;
    }
}

相关文章推荐

java 编码 UTF-8、ISO-8859-1、GBK

  • 2014年05月10日 09:10
  • 17KB
  • 下载

Java项目GBK编码转UTF-8

方法一:使用Apache的common-io1.maven项目pom.xml commons-io commons-io 2.5 2....

JAVA UTF-8编码中文转拼音

  • 2015年08月12日 12:35
  • 53KB
  • 下载

Java中字符编码问题和中文占几个字节的问题(ASCII Unicode UTF-8 )

ASCII码在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节...

Java中的ASCII、Unicode和UTF-8字符编码集

原文:http://kxjhlele.iteye.com/blog/333211 首先讲一下几种字符的编码方式: 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一...

java 编码 UTF-8、ISO-8859-1、GBK

java 编码 UTF-8、ISO-8859-1、GBK Java支持UTF-8、ISO-8859-1、GBK等各种字体编码,可笔者发现Java中字体编码的问题仍难倒了不少程序员,网上虽然也有...
  • zqd32
  • zqd32
  • 2011年10月27日 10:13
  • 496
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java下的 UTF-8编码
举报原因:
原因补充:

(最多只允许输入30个字)