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 JDK的默认编码为UTF-8

首先,在网上找了一段程序来查看自己当前系统的默认编码: import java.io.ByteArrayOutputStream; import java.io.OutputStream...
  • xiaobing_122613
  • xiaobing_122613
  • 2017年04月17日 12:36
  • 396

UTF-8格式编码与UTF-8无BOM格式编码的区别(包括java文件)

BOM——Byte Order Mark,就是字节序标记 在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字...
  • fhzaitian
  • fhzaitian
  • 2016年05月25日 09:07
  • 4329

Java_字符编码(Unicode、UTF-8、UTF-16)

首先看一下下面的程序(测试英文和中文在Unicode、UTF-8、UTF-16这三种编码下,一个字符占几个字节) [java] view plaincopy ...
  • z69183787
  • z69183787
  • 2014年05月13日 21:36
  • 952

如何使用Java代码将GBK编码格式的工程转换为UTF-8编码格式的工程

如何使用Java代码将GBK编码格式的工程转换为UTF-8编码格式的工程
  • wangshuxuncom
  • wangshuxuncom
  • 2015年02月11日 17:52
  • 3123

Android Java中将unicode的汉字码转换成utf-8格式的汉字

最近项目中跟后台的交互莫名其妙的String类型的全部都是”乱码”了。比如网络请求给后台post传递的参数中有一个String类型的参数,结果到了后台哪里接收到的就是”乱码”了,同样的,后台给返回回来...
  • qq_34471736
  • qq_34471736
  • 2017年04月21日 10:29
  • 1959

java的字符转码;eclipse设置UTF-8

第一部分: myeclipse如何设置utf-8第二部分: 来源:http://www.zhihu.com/question/20361462什么是字符编码? 来源:http://zh.wiki...
  • fengfeng043
  • fengfeng043
  • 2015年04月17日 15:40
  • 1307

Java项目GBK编码转UTF-8

方法一:使用Apache的common-io1.maven项目pom.xml commons-io commons-io 2.5 2....
  • ccq901027
  • ccq901027
  • 2017年03月29日 10:28
  • 546

关于java UTF-8中文与Unicode编码之间转换,以及将浏览器地址栏编码过的中文转换UTF-8形式

关于java UTF-8中文与Unicode编码之间转换,以及将浏览器地址栏编码过的中文转换UTF-8形式...
  • lyankj
  • lyankj
  • 2016年07月01日 15:25
  • 1771

UTF-8 可变编码格式

UTF-8 是一种可变编码格式,长度从一个字节到四个字节,可根据UTF-8字符的第一个字节来识别一个UTF-8字符的长度(具体见下面描述). 因为网络中大部分的字符是ASCII码字符,UTF-8可以用...
  • swedenfeng
  • swedenfeng
  • 2016年12月05日 17:51
  • 328

Eclipse:批量将Java源代码文件的编码从GBK转为UTF-8

问题场景:由于老项目采用GBK编码格式,而新项目采用的UTF-8编码格式,如果直接把Java源代码复制到Eclipse中所有的中文信息都出现乱码。将文本文件的编码格式从GBK转UTF-8的方式有很多,...
  • jj88888
  • jj88888
  • 2013年10月14日 16:53
  • 2993
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java下的 UTF-8编码
举报原因:
原因补充:

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