Android中文和Unicode互转工具类

Kotlin

package com.zcs.app.demo

fun main() {
    val src = "你好 世界?Hello World,Kotlin > Java"
    val unicode = UnicodeUtils.decode(src)
    val str = UnicodeUtils.encode(unicode)
    println("Unicode is --> $unicode")
    println("Chinese is --> $str")
}

/**
 * @author ZengCS
 * @deprecated Kotlin处理中文和Unicode互转工具类
 */
object UnicodeUtils {
    /**
     * 将字符串转成Unicode编码,包括但不限于中文
     *
     * @param src 原始字符串,包括但不限于中文
     * @return Unicode编码字符串
     */
    fun decode(src: String): String {
        val builder = StringBuilder()
        for (element in src) {
            // 如果你的Kotlin版本低于1.5,这里 element.code 会报错 找不到方法,请替换成:
            // Kotlin < 1.5
            // var s = Integer.toHexString(element.toInt())
            // Kotlin >= 1.5
            var s = Integer.toHexString(element.code)

            if (s.length == 2) {// 英文转16进制后只有两位,补全4位
                s = "00$s"
            }
            builder.append("\\u$s")
        }
        return builder.toString()
    }

    /**
     * 解码Unicode字符串,得到原始字符串
     *
     * @param unicode Unicode字符串
     * @return 解码后的原始字符串
     */
    fun encode(unicode: String): String {
        val builder = StringBuilder()
        val hex = unicode.split("\\\\u".toRegex()).toTypedArray()
        for (i in 1 until hex.size) {
            val data = hex[i].toInt(16)
            builder.append(data.toChar())
        }
        return builder.toString()
    }
}

Java

package com.zcs.app.demo;

/**
 * @author ZengCS
 * @deprecated Java处理中文和Unicode互转工具类
 */
public class JUnicodeUtils {
    public static void main(String[] args) {
        String src = "你好 世界?Hello World,I am Java";
        String unicode = decode(src);
        String str = encode(unicode);
        System.out.println("Unicode is --> " + unicode);
        System.out.println("Chinese is --> " + str);
    }

    /**
     * 将字符串转成Unicode编码,包括但不限于中文
     *
     * @param src 原始字符串,包括但不限于中文
     * @return Unicode编码字符串
     */
    public static String decode(String src) {
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < src.length(); i++) {
            char c = src.charAt(i);
            String s = Integer.toHexString(c);
            if (s.length() == 2) {
                s = "00" + s;
            }
            builder.append("\\u").append(s);
        }
        return builder.toString();
    }

    /**
     * 解码Unicode字符串,得到原始字符串
     *
     * @param unicode Unicode字符串
     * @return 解码后的原始字符串
     */
    public static String encode(String unicode) {
        StringBuilder builder = new StringBuilder();
        String[] hex = unicode.split("\\\\u");
        for (int i = 1; i < hex.length; i++) {
            int data = Integer.parseInt(hex[i], 16);
            builder.append((char) data);
        }
        return builder.toString();
    }
}

转换后,可以通过这个工具网站进行验证:https://www.bejson.com/convert/unicode_chinese/

你可能感兴趣的:(Android中文和Unicode互转工具类)