js实现unicode码字符串与utf8字节数据互转详解

下面是详细讲解“js实现unicode码字符串与utf8字节数据互转”的攻略:

什么是Unicode和UTF-8?

Unicode是一种字符集,它为世界上所有的字符都分配了一个唯一的数字编号,这个数字就是字符的Unicode码。而UTF-8是Unicode的一种编码方式,它将Unicode码转换成字节流,方便在计算机中进行存储和传输。

Unicode字符串转成UTF-8字节数据

function stringToUtf8ByteArray(str) {
    const utf8Array = new Array();
    for (let i = 0; i < str.length; i++) {
        let charcode = str.charCodeAt(i);
        if (charcode < 0x80) utf8Array.push(charcode);
        else if (charcode < 0x800) {
            utf8Array.push(((charcode >> 6) & 0x1F) | 0xC0);
            utf8Array.push((charcode & 0x3F) | 0x80);
        } else if (charcode < 0x10000) {
            utf8Array.push(((charcode >> 12) & 0x0F) | 0xE0);
            utf8Array.push(((charcode >> 6) & 0x3F) | 0x80);
            utf8Array.push((charcode & 0x3F) | 0x80);
        } else {
            utf8Array.push(((charcode >> 18) & 0x07) | 0xF0);
            utf8Array.push(((charcode >> 12) & 0x3F) | 0x80);
            utf8Array.push(((charcode >> 6) & 0x3F) | 0x80);
            utf8Array.push((charcode & 0x3F) | 0x80);
        }
    }
    return utf8Array;
}

以上代码实现了将Unicode字符串转换成UTF-8字节数据的功能,算法原理是根据Unicode码对每个字符进行分类判断,然后将字符的UTF-8编码添加到数组中。示例代码如下:

const str = "Hello, 世界";
const byteArray = stringToUtf8ByteArray(str);
console.log(byteArray); // [ 72, 101, 108, 108, 111, 44, 32, 228, 184, 150, 231, 149, 140 ]

以上代码就是将"Hello, 世界"这个Unicode字符串转成了UTF-8字节数据。

UTF-8字节数据转成Unicode字符串

function utf8ByteArrayToString(byteArray) {
    let resultStr = '';
    for (let i = 0; i < byteArray.length; i++) {
        let number = byteArray[i];
        if (number < 128) {
            resultStr += String.fromCharCode(number);
        } else if (number >= 192 && number <= 223) {
            i ++;
            let nextNumber = byteArray[i];
            resultStr += String.fromCharCode(((number & 0x1F) << 6) | (nextNumber & 0x3F));
        } else if (number >= 224 && number <= 239) {
            i ++;
            let nextNumber1 = byteArray[i];
            i ++;
            let nextNumber2 = byteArray[i];
            resultStr += String.fromCharCode(((number & 0x0F) << 12) | ((nextNumber1 & 0x3F) << 6) | (nextNumber2 & 0x3F))
        } else if (number >= 240 && number <= 247) {
            i ++;
            let nextNumber1 = byteArray[i];
            i ++;
            let nextNumber2 = byteArray[i];
            i ++;
            let nextNumber3 = byteArray[i];
            resultStr += String.fromCharCode(((number & 0x07) << 18) | ((nextNumber1 & 0x3F) << 12) | ((nextNumber2 & 0x3F) << 6) | (nextNumber3 & 0x3F))
        }
    }
    return resultStr;
}

以上代码实现了将UTF-8字节数据转换成Unicode字符串的功能,算法原理是根据UTF-8字节数据的特点,对每个字节进行分类处理,然后转成Unicode码,最后将Unicode码转成字符,然后拼接成字符串。示例代码如下:

const byteArray = [ 72, 101, 108, 108, 111, 44, 32, 228, 184, 150, 231, 149, 140 ];
const str = utf8ByteArrayToString(byteArray);
console.log(str); // "Hello, 世界"

以上代码就是将[ 72, 101, 108, 108, 111, 44, 32, 228, 184, 150, 231, 149, 140 ]这个UTF-8字节数据转成了"Hello, 世界"这个Unicode字符串。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现unicode码字符串与utf8字节数据互转详解 - Python技术站

(1)
上一篇 2023年6月13日
下一篇 2023年6月13日

相关文章

  • 如何利用python在剪贴板上读取/写入数据

    利用Python可以对剪贴板进行读取和写入操作,具体步骤如下: 安装依赖 Python中需要借助第三方库pyperclip来实现对剪贴板的控制。可以利用pip命令进行安装: pip install pyperclip 读取剪贴板数据 首先需要导入pyperclip库: import pyperclip 然后调用pyperclip库的paste()方法即可读取…

    python 2023年6月13日
    00
  • Pandas筛选DataFrame含有空值的数据行的实现

    Pandas是Python中一个广受欢迎的数据处理库,它的DataFrame对象提供了很多方便的方法来处理和分析数据。对于数据分析和建模工作,经常需要处理和清洗含有缺失数据的数据集。下面是筛选DataFrame含有空值的数据行的实现攻略。 1. DataFrame对象的isnull()方法 Pandas提供了DataFrame对象的isnull()方法来检测…

    python 2023年6月13日
    00
  • 20个解决日常编程问题的Python代码分享

    “20个解决日常编程问题的Python代码分享”的完整攻略可以分为以下几个部分: 1. 收集问题和解决方案 这一步需要花费大量时间和精力,收集常见的日常编程问题,并找到相应的Python解决方案。收集的问题和解决方案可以来自于各种渠道,如网络论坛、博客、GitHub等。收集的问题应该具有一定的代表性和覆盖面,包括但不限于字符串操作、文件处理、数据结构、算法等…

    python 2023年6月13日
    00
  • python 在mysql中插入null空值的操作

    当我们需要向MySQL中插入一条空值时,我们可以使用Python中的None来表示,将None值传递给INSERT语句中的相应字段即可。 下面我们通过两条示例来说明如何使用Python插入MySQL中的空值: 示例 1:使用executemany插入多条空值 import mysql.connector # 连接MySQL数据库 conn = mysql.c…

    python 2023年6月13日
    00
  • python处理两种分隔符的数据集方法

    要处理两种分隔符的数据集,一种常见的方式是使用 Python 中的 re 模块来实现正则表达式匹配。下面就是具体步骤: 步骤一:导入re模块 import re 步骤二:定义两种分隔符的正则表达式 假设数据集中使用了逗号和冒号作为分隔符。 separator = r'[,|:]’ 步骤三:使用正则表达式切分数据集 data = "Alice,20|…

    python 2023年6月13日
    00
  • Python使用sqlite3第三方库读写SQLite数据库的方法步骤

    下面是Python使用sqlite3第三方库读写SQLite数据库的方法步骤的完整攻略。 SQLite数据库简介 SQLite是一种轻量级数据库,它以文件形式存储数据,无需服务器来管理数据。SQLite支持SQL语法,拥有良好的移植性和高性能,被广泛应用于桌面应用、嵌入式设备和移动设备等领域。 Python使用sqlite3库操作SQLite数据库的方法步骤…

    python 2023年6月13日
    00
  • Python sklearn对文本数据进行特征化提取

    一、Python sklearn对文本数据进行特征化提取的完整攻略 1.概述 机器学习通常需要将非数值形式的数据(如文本)转换为数值形式,以便更好地进行处理和训练。Python的sklearn库提供了多种文本特征提取方法,包括词袋模型、TF-IDF、词向量等。 2.准备工作 首先,需要将文本数据转换为符合要求的格式,一般是一个列表,其中每个元素代表一篇文档,…

    python 2023年6月13日
    00
  • Python时间处理模块Time和DateTime

    Python时间处理模块Time和DateTime Time模块 time模块提供了基本的时间处理功能,可以获取当前时间、格式化时间、转换时间戳等。 获取当前时间 获取当前时间可以使用time()函数,返回当前时间的时间戳。时间戳是一个以秒为单位的浮点数,表示自1970年1月1日0时0分0秒(UTC)起经过了多少秒。可以通过ctime()函数将时间戳转换成字…

    python 2023年6月13日
    00
合作推广
合作推广
分享本页
返回顶部