国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

java 實(shí)現(xiàn)Unicode與普通字符(包括中文)的轉(zhuǎn)換

這篇具有很好參考價(jià)值的文章主要介紹了java 實(shí)現(xiàn)Unicode與普通字符(包括中文)的轉(zhuǎn)換。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

? ? 今天使用zl464發(fā)送tts語音播報(bào),文檔上面明確要求中文編碼是UTF-8,但是我發(fā)過去的中文,它全都不認(rèn)識(shí),最后實(shí)驗(yàn)出來需要將字符串轉(zhuǎn)成Unicode它就認(rèn)識(shí)了,下面記錄了java中文轉(zhuǎn)Unicode的方法。

Java實(shí)現(xiàn)Unicode與普通字符的轉(zhuǎn)換
什么是Unicode?與UTF-8、UTF-16、UTF-32是什么關(guān)系?
Unicode是一個(gè)字符編碼標(biāo)準(zhǔn),負(fù)責(zé)分配某個(gè)字符在Unicode字符集中的序號。

UTF-8、UTF-16、UTF-32等則是具體的編碼方案,也就是將字符在Unicode字符集中的序號轉(zhuǎn)換為具體的編碼方案。

如:

UTF-8是針對不同范圍的序號轉(zhuǎn)換成不同長度的字符編碼,最短編碼為一個(gè)字節(jié)(8bit),可兼容ASCII;
UTF-16跟UTF-8類似,不過最短編碼為兩個(gè)字節(jié)(16bit),不可兼容ASCII;
當(dāng)前Unicode能容納的最大編號為2^32 - 1,也就是32bit,所以UTF-32是每個(gè)字符長度固定為32bit的定長編碼。
如何進(jìn)行轉(zhuǎn)換?
知道什么是Unicode以后,代碼就很簡單了:將字符對應(yīng)的Unicode編碼轉(zhuǎn)為16進(jìn)制,并加上\u前綴即可轉(zhuǎn)為Unicode;剝離Unicode的\u前綴即可獲得其在Unicode字符集的序號,轉(zhuǎn)成String即可。

引用原文鏈接:https://blog.csdn.net/java_t_t/article/details/127840074文章來源地址http://www.zghlxwxcb.cn/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串轉(zhuǎn)字符串
     *
     * @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();
    }

    /**
     * 字符串轉(zhuǎn)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);

            // 轉(zhuǎn)換為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();
    }


    /**
     * 混合串轉(zhuǎn)普通字符串
     * 混合串指的是包含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();
    }

    /**
     * 混合串轉(zhuǎn)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();
    }


    /**
     * 字符串轉(zhuǎn)換unicode,不能轉(zhuǎn)換符號
     */
    public static String string2Unicode(String string) {
        StringBuffer unicode = new StringBuffer();
        for (int i = 0; i < string.length(); i++) {
            // 取出每一個(gè)字符
            char c = string.charAt(i);
            if (c < 0x20 || c > 0x7E) {
                // 轉(zhuǎn)換為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("您好,您的訂單即將結(jié)束,剩余時(shí)間15分鐘,如需延時(shí),請盡快續(xù)約!"));
        v.put("vol", 100);

        String strPacket = JSON.toJSONString(v);

        System.out.println(msg);
        System.out.println(strPacket);
        //map 轉(zhuǎn)成json 后會(huì)有多余的反斜杠需要去掉
        System.out.println(strPacket.replace("\\\\", "\\"));

  


    }
}

到了這里,關(guān)于java 實(shí)現(xiàn)Unicode與普通字符(包括中文)的轉(zhuǎn)換的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • idea properties配置文件中的中文顯示為unicode轉(zhuǎn)中文顯示

    idea properties配置文件中的中文顯示為unicode轉(zhuǎn)中文顯示

    一、前言 如圖所示,有時(shí)候我們項(xiàng)目里的properties配置文件中的中文顯示為unicode編碼格式如下圖所示,無法查看其真正意思。有的人會(huì)找unicode轉(zhuǎn)換工具查看,這樣很麻煩,有一個(gè)好辦法。 二、步驟 1、通過Settings顯示成中文的,方法:File-Settings,在Settings搜索框上搜索File E

    2024年02月11日
    瀏覽(16)
  • SQL SERVER的字符類型使用Unicode

    SQL SERVER的字符類型使用Unicode

    字符編碼和排序規(guī)則 下面的討論用到W、王和??三個(gè)字符,以下是這三個(gè)字符的各種編碼 先看看不帶N和帶N的字符字面量各用什么編碼,用Microsoft SQL Server Management Studio連接SQL SERVER 2022執(zhí)行下面SQL語句: 可以確定,帶N的是用UTF-16編碼,而不帶N的不是GB2312就是GBK或GB18030,默認(rèn)

    2024年04月26日
    瀏覽(13)
  • 正確使用 Unicode 和 MBCS 字符集

    在 Windows 下做開發(fā),初學(xué)者經(jīng)常面臨字符集選擇的問題。本文詳細(xì)解釋 MBCS 字符集和 Unicode 字符集的正確使用方法,以及為什么寫程序要用 Unicode 字符集。同時(shí)對 UTF-8 做了簡單介紹。 以 VC 為例,微軟在 VC6.0 的時(shí)候,創(chuàng)建項(xiàng)目的默認(rèn)字符集是 MBCS。從 VC2002(就是 VC7.0)開始,

    2024年02月07日
    瀏覽(21)
  • JavaScript中的Unicode和字符串內(nèi)部結(jié)構(gòu)

    JavaScript中的Unicode和字符串內(nèi)部結(jié)構(gòu)

    ????? 個(gè)人主頁: 《愛蹦跶的大A阿》 ?? 當(dāng)前正在更新專欄: 《VUE》?、《JavaScript保姆級教程》、《krpano》、《krpano中文文檔》 ?? ? ????????在我們的日常生活中,JavaScript已經(jīng)成為了一種無處不在的編程語言。它的應(yīng)用范圍從簡單的網(wǎng)頁動(dòng)畫,到復(fù)雜的前端框架,

    2024年01月23日
    瀏覽(17)
  • 字符集與字符編碼的區(qū)別與演進(jìn)(ASCII、GBK、UNICODE)

    字符集與字符編碼的區(qū)別與演進(jìn)(ASCII、GBK、UNICODE)

    需要注意字符集和字符編碼是不同的。比如當(dāng)我們提到“數(shù)據(jù)庫使用的是unicode字符集”,這樣的說法是錯(cuò)誤的,數(shù)據(jù)庫中的數(shù)據(jù)一定要具體到某一種字符編碼,只提到字符集是沒有意義的,例如數(shù)據(jù)庫使用UFT-8編碼。 字符集:字符和字符碼的映射關(guān)系,例如在ASCII中a的字符碼

    2023年04月18日
    瀏覽(21)
  • 字符集與字符編碼(理解ASCII、ANSI、UTF-8、Unicode,解決各種亂碼問題)

    字符集與字符編碼(理解ASCII、ANSI、UTF-8、Unicode,解決各種亂碼問題)

    相信很多同學(xué)也像我一樣,經(jīng)常在工作和學(xué)習(xí)中遇到字符編碼的疑惑或者受到亂碼的困擾,每次遇到問題都需要去學(xué)習(xí)了解不同的名詞含義甚至需要深入學(xué)習(xí)不同的編碼機(jī)制,不勝煩惱,所以今天我將自己的學(xué)習(xí)心得記錄下來,希望能簡單明了地描述字符集和字符編碼。 首先

    2024年02月03日
    瀏覽(24)
  • 從Google網(wǎng)頁中通過正則表達(dá)式獲取json如何轉(zhuǎn)換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日
    瀏覽(17)
  • 9.Python從入門到精通—Python 字符串格式化,三引號,Unicode 字符串

    Python中的字符串格式化是指將一個(gè)字符串中的占位符替換為指定的值。Python中有多種字符串格式化的方法,以下是其中的幾種常見方法: 使用百分號(%)進(jìn)行字符串格式化 使用百分號(%)進(jìn)行字符串格式化是Python中最早的字符串格式化方法。它的基本語法如下: 其中,格

    2024年03月20日
    瀏覽(44)
  • LCD-STM32液晶顯示中英文-(6.unicode字符集)

    LCD-STM32液晶顯示中英文-(6.unicode字符集)

    目錄 Unicode字符集和編碼 UTF-32 UTF-16 UTF-8(重點(diǎn):必須掌握) BOM ANSI ????????由于各個(gè)國家或地區(qū)都根據(jù)使用自己的文字系統(tǒng)制定標(biāo)準(zhǔn),同一個(gè)編碼在不同的標(biāo)準(zhǔn)里表示不一樣的字符,各個(gè)標(biāo)準(zhǔn)互不兼容,而又沒有一個(gè)標(biāo)準(zhǔn)能夠囊括所有的字符,即無法用一個(gè)標(biāo)準(zhǔn)表達(dá)所有

    2024年02月16日
    瀏覽(23)
  • MySQL 8.0 Reference Manual(讀書筆記37節(jié)-- 字符編碼(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)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包