JAVA之字符串和Unicode码互转_中文转换为Unicode

来源:互联网 发布:linux虚拟机建立文件夹 编辑:程序博客网 时间:2024/06/03 18:19

废话少说,直接上Demo,注释在代码中。

转载地址:http://canofy.iteye.com/blog/718659

package com.weigeli.demo01.util;import java.io.UnsupportedEncodingException;import java.util.Locale;/** * 实现字符串和Unicode码的互转 *  * @author weigeli * @version 1.0 * @since 2016年5月24日 下午11:14:36 */public class TransUnicode {/** * main测试方法 *  * @param args */public static void main(String[] args) {System.out.println("chinaToUnicode=" + chinaToUnicode("中国abc中国"));System.out.println("isChinese=" + isChinese('中'));System.out.println("string2Unicode=" + string2Unicode("中国ABC"));System.out.println("unicode2String=" + unicode2String("\\U4E2D\\U56FD\\U0041\\U0042\\U0043"));}/** * 将字符串转换为Unicode码【中文】 *  * @param str * @return string */public static String chinaToUnicode(String str) {String result = "";// 循环获取字符串中每一个字符for (int i = 0; i < str.length(); i++) {// 当前字符int chr1 = (char) str.charAt(i);// 汉字范围 \u4e00-\u9fa5 (中文)if (chr1 >= 19968 && chr1 <= 171941) {// 将字符转换为16进制,并转换为大写result += "\\U" + Integer.toHexString(chr1).toUpperCase(Locale.US);} else {// 如果不是汉字,则直接返回原字符result += str.charAt(i);}}return result;}/** * 判断传入的char字符是否为中文 *  * @param c * @return boolean */public static boolean isChinese(char c) {Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS|| ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION|| ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {return true;}return false;}/** * 将传入的字符串转换为Unicode码 *  * @param s * @return string(Unicode) */public static String string2Unicode(String s) {StringBuffer out = new StringBuffer("");try {// 转换为byte数组byte[] bytes = s.getBytes("unicode");/* * 从bytes[2]位开始取值,每一个字符都在数组中占两位 * 每一个数组前一位转换为16进制字符串str1,后一位转换为16进制字符串str2;依次序拼接'\\u'+str1+str2 * 得到一个字符的完整Unicode码 */for (int i = 2; i < bytes.length - 1; i += 2) {out.append("\\u");// 将前位转换为16进制// &的位运算保证bytes[i]的前三个字节是0,只有最后一个字节有数(bytes[i]占位4个字节)String str1 = Integer.toHexString(bytes[i] & 0xff);// 转换为16进制后默认需要两位,不足两位的用0补齐for (int j = str1.length(); j < 2; j++) {out.append("0");}out.append(str1);// 将前位转换为16进制String str2 = Integer.toHexString(bytes[i + 1] & 0xff);for (int j = str2.length(); j < 2; j++) {out.append("0");}out.append(str2);}} catch (UnsupportedEncodingException e) {e.printStackTrace();}// 转换Unicode码为大写,并返回return out.toString().toUpperCase(Locale.US);}/** * 将传入的Unicode码翻译为字符串 *  * @param unicodeStr * @return string */public static String unicode2String(String unicodeStr) {StringBuffer sb = new StringBuffer();// 将Unicode字符串转换为大写,并以'U'分割为字符串数组String str[] = unicodeStr.toUpperCase(Locale.US).split("U");for (int i = 0; i < str.length; i++) {// 将数组每一个值中的'\'去除String charStr = str[i].trim().replaceAll("\\\\", "");// 为空时跳过本次循环if (charStr.equals(""))continue;// 将16进制反转为10进制,并强转为char类型char c = (char) Integer.parseInt(charStr, 16);// 将char拼接为目标字符串sb.append(c);}// 返回return sb.toString();}}

0 0