utf-8、gbk、unicode相互转码的几种方式

2 篇文章 0 订阅

utf-8、gbk、unicode相互转码的几种方式


以下代码是java对于常见编码方式进行相互转换的,主要是gbk和utf-8互转,gbk与uncode互转,utf-8与unicode互转。

package com.encoding.util;

import java.io.UnsupportedEncodingException;
import java.lang.Character.UnicodeBlock;

public class UtfAndGbk {
	
	/**
	 * 第一种方法
	 * utf-8转gbk
	 * @param utf8
	 * @return
	 * @throws UnsupportedEncodingException
	 */
	public static String utf8ToGbk(String utf8) throws UnsupportedEncodingException {
		return new String(new String(utf8.getBytes("UTF-8"), "GBK"));
	}

	/**
	 * 第一种方法
	 * gbk转utf-8
	 * @param utf8
	 * @return
	 * @throws UnsupportedEncodingException
	 */
	public static String gbkToUtf8(String utf8) throws UnsupportedEncodingException {
		return new String(new String(utf8.getBytes("GBK"), "UTF-8"));
	}
	
	/**
	 * 第二种方法
	 * gbk转utf-8   通过先转unicode,再转utf-8
	 * @param utf8
	 * @return
	 * @throws UnsupportedEncodingException
	 */
	public static String gbk2utf8(String gbk) {  
        String l_temp = GBK2Unicode(gbk);  
        l_temp = unicodeToUtf8(l_temp);  
  
        return l_temp;  
    }  
	/**
	 * 第二种方法
	 * utf-8转gbk  通过先转unicode再转gbk
	 * @param utf8
	 * @return
	 * @throws UnsupportedEncodingException
	 */
    public static String utf82gbk(String utf) {  
        String l_temp = utf8ToUnicode(utf);  
        l_temp = Unicode2GBK(l_temp);  
  
        return l_temp;  
    }  
  
    /** 
     * gbk转unicode
     * @param str 
     * @return String 
     */  
    public static String GBK2Unicode(String str) {  
        StringBuffer result = new StringBuffer();  
        for (int i = 0; i < str.length(); i++) {  
            char chr1 = (char) str.charAt(i);  
  
            if (!isNeedConvert(chr1)) {  
                result.append(chr1);  
                continue;  
            }  
  
            result.append("\\u" + Integer.toHexString((int) chr1));  
        }  
  
        return result.toString();  
    }  
  
    /** 
     *  unicode转gbk
     * @param dataStr 
     * @return String 
     */  
  
    public static String Unicode2GBK(String dataStr) {  
        int index = 0;  
        StringBuffer buffer = new StringBuffer();  
  
        int li_len = dataStr.length();  
        while (index < li_len) {  
            if (index >= li_len - 1  
                    || !"\\u".equals(dataStr.substring(index, index + 2))) {  
                buffer.append(dataStr.charAt(index));  
  
                index++;  
                continue;  
            }  
  
            String charStr = "";  
            charStr = dataStr.substring(index + 2, index + 6);  
  
            char letter = (char) Integer.parseInt(charStr, 16);  
  
            buffer.append(letter);  
            index += 6;  
        }  
  
        return buffer.toString();  
    }  
  
    
    public static boolean isNeedConvert(char para) {  
        return ((para & (0x00FF)) != para);  
    }  
  
    /** 
     * utf-8 转unicode 
     *  
     * @param inStr 
     * @return String 
     */  
    public static String utf8ToUnicode(String inStr) {  
        char[] myBuffer = inStr.toCharArray();  
  
        StringBuffer sb = new StringBuffer();  
        for (int i = 0; i < inStr.length(); i++) {  
            UnicodeBlock ub = UnicodeBlock.of(myBuffer[i]);  
            if (ub == UnicodeBlock.BASIC_LATIN) {  
                sb.append(myBuffer[i]);  
            } else if (ub == UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {  
                int j = (int) myBuffer[i] - 65248;  
                sb.append((char) j);  
            } else {  
                short s = (short) myBuffer[i];  
                String hexS = Integer.toHexString(s);  
                String unicode = "\\u" + hexS;  
                sb.append(unicode.toLowerCase());  
            }  
        }  
        return sb.toString();  
    }  
  
    /** 
     *  unicode转utf-8
     * @param theString 
     * @return String 
     */  
    public static String unicodeToUtf8(String theString) {  
        char aChar;  
        int len = theString.length();  
        StringBuffer outBuffer = new StringBuffer(len);  
        for (int x = 0; x < len;) {  
            aChar = theString.charAt(x++);  
            if (aChar == '\\') {  
                aChar = theString.charAt(x++);  
                if (aChar == 'u') {  
                    // Read the xxxx  
                    int value = 0;  
                    for (int i = 0; i < 4; i++) {  
                        aChar = theString.charAt(x++);  
                        switch (aChar) {  
                        case '0':  
                        case '1':  
                        case '2':  
                        case '3':  
                        case '4':  
                        case '5':  
                        case '6':  
                        case '7':  
                        case '8':  
                        case '9':  
                            value = (value << 4) + aChar - '0';  
                            break;  
                        case 'a':  
                        case 'b':  
                        case 'c':  
                        case 'd':  
                        case 'e':  
                        case 'f':  
                            value = (value << 4) + 10 + aChar - 'a';  
                            break;  
                        case 'A':  
                        case 'B':  
                        case 'C':  
                        case 'D':  
                        case 'E':  
                        case 'F':  
                            value = (value << 4) + 10 + aChar - 'A';  
                            break;  
                        default:  
                            throw new IllegalArgumentException(  
                                    "Malformed   \\uxxxx   encoding.");  
                        }  
                    }  
                    outBuffer.append((char) value);  
                } else {  
                    if (aChar == 't')  
                        aChar = '\t';  
                    else if (aChar == 'r')  
                        aChar = '\r';  
                    else if (aChar == 'n')  
                        aChar = '\n';  
                    else if (aChar == 'f')  
                        aChar = '\f';  
                    outBuffer.append(aChar);  
                }  
            } else  
                outBuffer.append(aChar);  
        }  
        return outBuffer.toString();  
    }  
}


  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值