首页>代码>精心整理的java常用的26个工具类>/com-jarvis-base/src/main/java/com/jarvis/base/util/CharHelper.java
package com.jarvis.base.util;

import java.io.IOException;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;

/**
 * <p>
 * Title:字符编码工具类
 * </p>
 * <p>
 * Description:
 * </p>
 * <p>
 * Copyright: Copyright (c) 2007
 * </p>
 * <p>
 * Company:
 * </p>
 * 
 * @author:
 * @version 1.0
 */
public class CharHelper {

	/**
	 * 转换编码 ISO-8859-1到GB2312
	 * 
	 * @param text
	 * @return
	 */
	public static final String ISO2GB(String text) {
		String result = "";
		try {
			result = new String(text.getBytes("ISO-8859-1"), "GB2312");
		} catch (UnsupportedEncodingException ex) {
			result = ex.toString();
		}
		return result;
	}

	/**
	 * 转换编码 GB2312到ISO-8859-1
	 * 
	 * @param text
	 * @return
	 */
	public static final String GB2ISO(String text) {
		String result = "";
		try {
			result = new String(text.getBytes("GB2312"), "ISO-8859-1");
		} catch (UnsupportedEncodingException ex) {
			ex.printStackTrace();
		}
		return result;
	}

	public static String GBK2UTF8(String strVal) {
		try {
			if (strVal == null) {
				return "";
			} else {
				strVal = new String(strVal.getBytes("GBK"), "UTF-8");
				return strVal;
			}
		} catch (Exception exp) {
			return "";
		}
	}

	/**
	 * 字符串从GBK编码转换为Unicode编码
	 * 
	 * @param text
	 * @return
	 */
	public static String GBK2Unicode(String text) {
		String result = "";
		int input;
		StringReader isr;
		try {
			isr = new StringReader(new String(text.getBytes(), "GBK"));
		} catch (UnsupportedEncodingException e) {
			return "-1";
		}
		try {
			while ((input = isr.read()) != -1) {
				result = result + "&#x" + Integer.toHexString(input) + ";";

			}
		} catch (IOException e) {
			return "-2";
		}
		isr.close();
		return result;

	}

	/**
	 * Author:Jack Time:2017年9月2日下午5:40:19
	 * 
	 * @param strVal
	 * @return Return:String Description:
	 */
	public static String ISO2UTF8(String strVal) {
		try {
			if (strVal == null) {
				return "";
			} else {
				strVal = new String(strVal.getBytes("ISO-8859-1"), "UTF-8");
				return strVal;
			}
		} catch (Exception exp) {
			return "";
		}
	}

	/**
	 * Author:Jack Time:2017年9月2日下午5:40:25
	 * 
	 * @param strVal
	 * @return Return:String Description:
	 */
	public static String UTF82ISO(String strVal) {
		try {
			if (strVal == null) {
				return "";
			} else {
				strVal = new String(strVal.getBytes("UTF-8"), "ISO-8859-1");
				return strVal;
			}
		} catch (Exception exp) {
			return "";
		}
	}

	/**
	 * 把字符串转换为UTF8859编码
	 *
	 * @param source
	 *            需要进行转换的字符串
	 */
	public static final String GBKto8859(String source) {
		String temp = null;
		if (source == null || source.equals("")) {
			return source;
		}
		try {
			temp = new String(source.getBytes("GBK"), "8859_1");
		} catch (Exception e) {
			e.printStackTrace();
			System.err.println("Convert code Error");
		}
		return temp;
	}

	/**
	 * 把字符串转换为GBK编码
	 *
	 * @param source
	 *            需要进行转换的字符串
	 */
	public static final String toGBK(String source) {
		String temp = null;
		if (source == null || source.equals("")) {
			return source;
		}
		try {
			temp = new String(source.getBytes("8859_1"), "GBK");
		} catch (Exception e) {
			e.printStackTrace();
			System.err.println("Convert code Error");
		}
		return temp;
	}

	/**
	 * 把字符串转换为gb2312编码
	 *
	 * @param source
	 *            需要进行转换的字符串
	 */
	public static final String toGb2312(String source) {
		String temp = null;
		if (source == null || source.equals("")) {
			return source;
		}
		try {
			temp = new String(source.getBytes("8859_1"), "GB2312");
		} catch (Exception e) {
			e.printStackTrace();
			System.err.println("转换字符串为gb2312编码出错");
		}
		return temp;
	}

	/**
	 * 把中文字符串,转换为unicode字符串
	 *
	 * @param source
	 *            需要进行转换的字符串
	 * @return 转换后的unicode字符串
	 */
	public static String chineseToUnicode(String source) {
		if (source == null || source.trim().length() == 0) {
			return source;
		}
		String unicode = null;
		String temp = null;
		for (int i = 0; i < source.length(); i++) {
			temp = "\\u" + Integer.toHexString((int) source.charAt(i));
			unicode = unicode == null ? temp : unicode + temp;
		}
		return unicode;
	}

	/**
	 * 在将数据存入数据库前转换
	 * 
	 * @param strVal
	 *            要转换的字符串
	 * @return 从“ISO8859_1”到“GBK”得到的字符串
	 * @since 1.0
	 */
	public static String toChinese(String strVal) {
		try {
			if (strVal == null) {
				return "";
			} else {
				strVal = strVal.trim();
				strVal = new String(strVal.getBytes("ISO8859_1"), "GBK");
				return strVal;
			}
		} catch (Exception exp) {
			return "";
		}
	}

	/**
	 * Utf8URL编码
	 * 
	 * @param s
	 * @return
	 */
	public static final String Utf8URLencode(String text) {
		StringBuffer result = new StringBuffer();

		for (int i = 0; i < text.length(); i++) {

			char c = text.charAt(i);
			if (c >= 0 && c <= 255) {
				result.append(c);
			} else {

				byte[] b = new byte[0];
				try {
					b = Character.toString(c).getBytes("UTF-8");
				} catch (Exception ex) {
				}

				for (int j = 0; j < b.length; j++) {
					int k = b[j];
					if (k < 0)
						k += 256;
					result.append("%" + Integer.toHexString(k).toUpperCase());
				}

			}
		}

		return result.toString();
	}

	/**
	 * Utf8URL解码
	 * 
	 * @param text
	 * @return
	 */
	public static final String Utf8URLdecode(String text) {
		String result = "";
		int p = 0;

		if (text != null && text.length() > 0) {
			text = text.toLowerCase();
			p = text.indexOf("%e");
			if (p == -1)
				return text;

			while (p != -1) {
				result += text.substring(0, p);
				text = text.substring(p, text.length());
				if (text == "" || text.length() < 9)
					return result;

				result += CodeToWord(text.substring(0, 9));
				text = text.substring(9, text.length());
				p = text.indexOf("%e");
			}

		}

		return result + text;
	}

	/**
	 * utf8URL编码转字符
	 * 
	 * @param text
	 * @return
	 */
	private static final String CodeToWord(String text) {
		String result;

		if (Utf8codeCheck(text)) {
			byte[] code = new byte[3];
			code[0] = (byte) (Integer.parseInt(text.substring(1, 3), 16) - 256);
			code[1] = (byte) (Integer.parseInt(text.substring(4, 6), 16) - 256);
			code[2] = (byte) (Integer.parseInt(text.substring(7, 9), 16) - 256);
			try {
				result = new String(code, "UTF-8");
			} catch (UnsupportedEncodingException ex) {
				result = null;
			}
		} else {
			result = text;
		}

		return result;
	}

	/**
	 * 编码是否有效
	 * 
	 * @param text
	 * @return
	 */
	@SuppressWarnings("unused")
	private static final boolean Utf8codeCheck(String text) {
		String sign = "";
		if (text.startsWith("%e"))
			for (int i = 0, p = 0; p != -1; i++) {
				p = text.indexOf("%", p);
				if (p != -1)
					p++;
				sign += p;
			}
		return sign.equals("147-1");
	}

	/**
	 * 判断是否Utf8Url编码
	 * 
	 * @param text
	 * @return
	 */
	public static final boolean isUtf8Url(String text) {
		text = text.toLowerCase();
		int p = text.indexOf("%");
		if (p != -1 && text.length() - p > 9) {
			text = text.substring(p, p + 9);
		}
		return Utf8codeCheck(text);
	}

	/**
	 * 测试
	 * 
	 * @param args
	 */
	public static void main(String[] args) {

		// CharTools charTools = new CharTools();

		String url;

		url = "http://www.google.com/search?hl=zh-CN&newwindow=1&q=%E4%B8%AD%E5%9B%BD%E5%A4%A7%E7%99%BE%E7%A7%91%E5%9C%A8%E7%BA%BF%E5%85%A8%E6%96%87%E6%A3%80%E7%B4%A2&btnG=%E6%90%9C%E7%B4%A2&lr=";
		if (CharHelper.isUtf8Url(url)) {
			System.out.println(CharHelper.Utf8URLdecode(url));
		} else {
			// System.out.println(URLDecoder.decode(url));
		}

		url = "http://www.baidu.com/baidu?word=%D6%D0%B9%FA%B4%F3%B0%D9%BF%C6%D4%DA%CF%DF%C8%AB%CE%C4%BC%EC%CB%F7&tn=myie2dg";
		if (CharHelper.isUtf8Url(url)) {
			System.out.println(CharHelper.Utf8URLdecode(url));
		} else {
			// System.out.println(URLDecoder.decode(url));
		}

	}

}
最近下载更多
dsw9wuji  LV1 2023年3月28日
二进制2  LV3 2023年1月6日
zkyzlk  LV1 2022年9月15日
ewan007  LV29 2022年7月8日
dzzw123  LV1 2021年6月18日
落后就要挨打  LV26 2021年6月16日
212828939  LV16 2020年10月20日
vitos5n  LV9 2020年10月14日
18720962954  LV4 2020年7月30日
moomin709  LV24 2020年7月6日
最近浏览更多
暂无贡献等级
Wsy2860  LV1 2023年9月6日
飘逸的云  LV1 2023年7月6日
我擦嘞 2023年7月6日
暂无贡献等级
wuziayng1232  LV10 2023年5月31日
wangyao112233  LV2 2023年2月1日
二进制2  LV3 2023年1月6日
stonemachen  LV3 2022年10月31日
香菇肉饼汤  LV8 2022年10月30日
heiren2 2022年10月28日
暂无贡献等级
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友