java 实现Unicode与普通字符(包括中文)的转换

这篇具有很好参考价值的文章主要介绍了java 实现Unicode与普通字符(包括中文)的转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

    今天使用zl464发送tts语音播报,文档上面明确要求中文编码是UTF-8,但是我发过去的中文,它全都不认识,最后实验出来需要将字符串转成Unicode它就认识了,下面记录了java中文转Unicode的方法。

Java实现Unicode与普通字符的转换
什么是Unicode?与UTF-8、UTF-16、UTF-32是什么关系?
Unicode是一个字符编码标准,负责分配某个字符在Unicode字符集中的序号。

UTF-8、UTF-16、UTF-32等则是具体的编码方案,也就是将字符在Unicode字符集中的序号转换为具体的编码方案。

如:

UTF-8是针对不同范围的序号转换成不同长度的字符编码,最短编码为一个字节(8bit),可兼容ASCII;
UTF-16跟UTF-8类似,不过最短编码为两个字节(16bit),不可兼容ASCII;
当前Unicode能容纳的最大编号为2^32 - 1,也就是32bit,所以UTF-32是每个字符长度固定为32bit的定长编码。
如何进行转换?
知道什么是Unicode以后,代码就很简单了:将字符对应的Unicode编码转为16进制,并加上\u前缀即可转为Unicode;剥离Unicode的\u前缀即可获得其在Unicode字符集的序号,转成String即可。

引用原文链接:https://blog.csdn.net/java_t_t/article/details/127840074文章来源地址https://www.toymoban.com/news/detail-694342.html

package com.photon.core.DataApi.Utils;

import com.alibaba.fastjson.JSON;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class UnicodeCharConvert {
    private static final Pattern PATTERN_UNICODE = Pattern.compile("\\\\u[a-f0-9A-F]{1,4}");

    /**
     * unicode串转字符串
     *
     * @param unicode unicode串
     * @return 字符串
     */
    private static String unicodeToChar(String unicode) {
        if (unicode == null || unicode.isEmpty()) {
            return unicode;
        }
        StringBuffer str = new StringBuffer();
        String[] hex = unicode.split("\\\\u");
        for (int index = 1; index < hex.length; index++) {
            int data = Integer.parseInt(hex[index], 16);
            str.append((char) data);
        }
        return str.toString();
    }

    /**
     * 字符串转unicode串
     *
     * @param str 字符串
     * @return unicode串
     */
    public static String charToUnicode(String str) {
        if (str == null || str.isEmpty()) {
            return str;
        }
        StringBuffer unicode = new StringBuffer();
        for (int index = 0; index < str.length(); index++) {
            char c = str.charAt(index);

            // 转换为unicode
            String tmp = Integer.toHexString(c);
            if (tmp.length() >= 4) {
                unicode.append("\\u" + tmp);
            } else if (tmp.length() == 3) {
                unicode.append("\\u0" + tmp);
            } else if (tmp.length() == 2) {
                unicode.append("\\u00" + tmp);
            } else if (tmp.length() == 1) {
                unicode.append("\\u000" + tmp);
            } else if (tmp.length() == 3) {
                unicode.append("\\u0000");
            }

        }
        return unicode.toString();
    }


    /**
     * 混合串转普通字符串
     * 混合串指的是包含unicode和普通字符的字符串
     *
     * @param mixStr 混合串
     * @return 普通字符串
     */
    public static String mixStrToString(String mixStr) {
        if (mixStr == null || mixStr.isEmpty()) {
            return mixStr;
        }
        int start = 0;
        StringBuffer result = new StringBuffer();
        Matcher matcher = PATTERN_UNICODE.matcher(mixStr);
        while (matcher.find()) {
            String oldChar = matcher.group();
            result.append(mixStr.substring(start, matcher.start()));
            result.append(unicodeToChar(oldChar));
            start = matcher.start() + oldChar.length();
        }
        result.append(mixStr.substring(start));
        return result.toString();
    }

    /**
     * 混合串转unicode串
     * 混合串指的是包含unicode和普通字符的字符串
     *
     * @param mixStr 混合串
     * @return unicode串
     */
    public static String mixStrToUnicode(String mixStr) {
        if (mixStr == null || mixStr.isEmpty()) {
            return mixStr;
        }
        int start = 0;
        StringBuffer result = new StringBuffer();
        Matcher matcher = PATTERN_UNICODE.matcher(mixStr);
        while (matcher.find()) {
            String oldChar = matcher.group();
            result.append(charToUnicode(mixStr.substring(start, matcher.start())));
            result.append(oldChar);
            start = matcher.start() + oldChar.length();
        }
        result.append(charToUnicode(mixStr.substring(start)));
        return result.toString();
    }


    /**
     * 字符串转换unicode,不能转换符号
     */
    public static String string2Unicode(String string) {
        StringBuffer unicode = new StringBuffer();
        for (int i = 0; i < string.length(); i++) {
            // 取出每一个字符
            char c = string.charAt(i);
            if (c < 0x20 || c > 0x7E) {
                // 转换为unicode
                String tmp = Integer.toHexString(c);
                if (tmp.length() >= 4) {
                    unicode.append("\\u" + Integer.toHexString(c));
                } else if (tmp.length() == 3) {
                    unicode.append("\\u0" + Integer.toHexString(c));
                } else if (tmp.length() == 2) {
                    unicode.append("\\u00" + Integer.toHexString(c));
                } else if (tmp.length() == 1) {
                    unicode.append("\\u000" + Integer.toHexString(c));
                } else if (tmp.length() == 3) {
                    unicode.append("\\u0000");
                }
            } else {
                unicode.append(c);
            }
        }
        return unicode.toString();
    }


    public static void main(String[] args) {

        Map<String, Object> v = new HashMap<>();

//        Channel channel = channelMap.get(IMEI);

        v.put("tts", UnicodeCharConvert.charToUnicode("您好,您的订单即将结束,剩余时间15分钟,如需延时,请尽快续约!"));
        v.put("vol", 100);

        String strPacket = JSON.toJSONString(v);

        System.out.println(msg);
        System.out.println(strPacket);
        //map 转成json 后会有多余的反斜杠需要去掉
        System.out.println(strPacket.replace("\\\\", "\\"));

  


    }
}

到了这里,关于java 实现Unicode与普通字符(包括中文)的转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • idea properties配置文件中的中文显示为unicode转中文显示

    一、前言 如图所示,有时候我们项目里的properties配置文件中的中文显示为unicode编码格式如下图所示,无法查看其真正意思。有的人会找unicode转换工具查看,这样很麻烦,有一个好办法。 二、步骤 1、通过Settings显示成中文的,方法:File-Settings,在Settings搜索框上搜索File E

    2024年02月11日
    浏览(38)
  • SQL SERVER的字符类型使用Unicode

    字符编码和排序规则 下面的讨论用到W、王和😀三个字符,以下是这三个字符的各种编码 先看看不带N和带N的字符字面量各用什么编码,用Microsoft SQL Server Management Studio连接SQL SERVER 2022执行下面SQL语句: 可以确定,带N的是用UTF-16编码,而不带N的不是GB2312就是GBK或GB18030,默认

    2024年04月26日
    浏览(22)
  • 正确使用 Unicode 和 MBCS 字符集

    在 Windows 下做开发,初学者经常面临字符集选择的问题。本文详细解释 MBCS 字符集和 Unicode 字符集的正确使用方法,以及为什么写程序要用 Unicode 字符集。同时对 UTF-8 做了简单介绍。 以 VC 为例,微软在 VC6.0 的时候,创建项目的默认字符集是 MBCS。从 VC2002(就是 VC7.0)开始,

    2024年02月07日
    浏览(57)
  • JavaScript中的Unicode和字符串内部结构

    🧑‍🎓 个人主页: 《爱蹦跶的大A阿》 🔥 当前正在更新专栏: 《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​  ​         在我们的日常生活中,JavaScript已经成为了一种无处不在的编程语言。它的应用范围从简单的网页动画,到复杂的前端框架,

    2024年01月23日
    浏览(37)
  • 字符集与字符编码的区别与演进(ASCII、GBK、UNICODE)

    需要注意字符集和字符编码是不同的。比如当我们提到“数据库使用的是unicode字符集”,这样的说法是错误的,数据库中的数据一定要具体到某一种字符编码,只提到字符集是没有意义的,例如数据库使用UFT-8编码。 字符集:字符和字符码的映射关系,例如在ASCII中a的字符码

    2023年04月18日
    浏览(32)
  • 字符集与字符编码(理解ASCII、ANSI、UTF-8、Unicode,解决各种乱码问题)

    相信很多同学也像我一样,经常在工作和学习中遇到字符编码的疑惑或者受到乱码的困扰,每次遇到问题都需要去学习了解不同的名词含义甚至需要深入学习不同的编码机制,不胜烦恼,所以今天我将自己的学习心得记录下来,希望能简单明了地描述字符集和字符编码。 首先

    2024年02月03日
    浏览(43)
  • 从Google网页中通过正则表达式获取json如何转换unicode对象

    场景: Google爬虫,获取下拉框搜索,需要获取页面的里面的json字符串如下面: \\\'{\\\\x22aa\\\\x22:{},\\\\x22abd\\\\x22:{\\\\x22abd\\\\x22:false,\\\\x22deb\\\\x22:false,\\\\x22det\\\\x22:false},\\\\x22async\\\\x22:{},\\\\x22attn\\\\x22:{},\\\\x22bgd\\\\x22:{\\\\x22ac\\\\x22:true,\\\\x22as\\\\x22:true,\\\\x22at\\\\x22:0,\\\\x22ea\\\\x22:true,\\\\x22ed\\\\x22:0,\\\\x22ei\\\\x22:tru

    2024年04月13日
    浏览(37)
  • 9.Python从入门到精通—Python 字符串格式化,三引号,Unicode 字符串

    Python中的字符串格式化是指将一个字符串中的占位符替换为指定的值。Python中有多种字符串格式化的方法,以下是其中的几种常见方法: 使用百分号(%)进行字符串格式化 使用百分号(%)进行字符串格式化是Python中最早的字符串格式化方法。它的基本语法如下: 其中,格

    2024年03月20日
    浏览(57)
  • MySQL 8.0 Reference Manual(读书笔记37节-- 字符编码(4)-Unicode Support)

    The Unicode Standard includes characters from the Basic Multilingual Plane (BMP) and supplementary characters that lie outside the BMP. This section describes support for Unicode in MySQL. BMP characters have these characteristics: • Their code point values are between 0 and 65535 (or U+0000 and U+FFFF). • They can be encoded in a variable-length encodin

    2024年04月14日
    浏览(37)
  • LCD-STM32液晶显示中英文-(6.unicode字符集)

    目录 Unicode字符集和编码 UTF-32 UTF-16 UTF-8(重点:必须掌握) BOM ANSI         由于各个国家或地区都根据使用自己的文字系统制定标准,同一个编码在不同的标准里表示不一样的字符,各个标准互不兼容,而又没有一个标准能够囊括所有的字符,即无法用一个标准表达所有

    2024年02月16日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包