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如何在DataFrame增加数值

    要在Python的pandas库中增加DataFrame中的数值,可以使用以下方法: 使用.loc[]方法选择要增加数值的数据行和列,然后将需要增加的数值加上即可,例如: import pandas as pd # 创建一个DataFrame df = pd.DataFrame({‘A’: [1, 2, 3], ‘B’: [4, 5, 6]}) # 选中第二…

    python 2023年6月13日
    00
  • python:删除离群值操作(每一行为一类数据)

    为了删除离群值,我们需要首先定义什么是离群值。一般来说,我们可以把一组数的平均值加上/减去两到三个标准差作为正常值的范围, 超出这个范围的就可以认为是异常值。 那么下面就是一组基于Python的删除离群值操作的攻略: 离群值的检测 我们可以借助三个方法来检测离群值: 1. 计算IQR(四分位间距) IQR = Q3 – Q1 其中Q3是数据上四分位数,Q1是…

    python 2023年6月13日
    00
  • Python 使用csv库处理CSV文件的方法

    Python是一种强大的编程语言,可通过它来读写CSV(Comma Separated Values)文件。CSV是一种常用的数据交换格式,可在各种应用程序之间共享数据。 Python内置的csv库提供了处理CSV文件的方法,可轻松读取、写入和转换CSV文件。下面是使用csv库处理CSV文件的步骤。 1. 导入csv库 要使用csv库,请先导入它。可以使用以…

    python 2023年6月13日
    00
  • python 字段拆分详解

    Python 字段拆分详解 在 Python 中,可以使用字符串的切片方法来对字符串进行拆分,也可以使用正则表达式进行字段拆分。下面将详细讲解这两种方法。 方法一:使用字符串切片 字符串切片(Slice)是 Python 中十分方便的语法,其语法形式如下: str[start:end:step] 其中,start 表示切片的起点,end 表示切片的终点,但不…

    python 2023年6月13日
    00
  • pandas DataFrame 删除重复的行的实现方法

    pandas DataFrame 删除重复的行的实现方法 在处理数据的过程中,经常会出现获取到的数据中存在重复的行的情况。在使用 pandas Dataframe 时,也可能会遇到这个问题。这时候,需要使用 Dataframe 方法之一:drop_duplicates()。 drop_duplicates() drop_duplicates() 方法用于删除…

    python 2023年6月13日
    00
  • python中append函数用法讲解

    当我们需要将一个元素添加到Python列表的末尾时,我们可以使用append()函数。下面是关于Python中append函数的完整攻略。 1. 什么是append()函数 在Python中,append()函数是列表对象的一种方法,用于在列表末尾添加一个新的元素。它是Python的内置函数,所以你可以直接调用该函数。 2. append函数的语法 appe…

    python 2023年6月13日
    00
  • 如何利用python在剪贴板上读取/写入数据

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

    python 2023年6月13日
    00
  • Python pymysql连接数据库并将查询结果转化为Pandas dataframe

    对于这个问题,我可以给出完整的Markdown格式文本攻略。 Python pymysql连接数据库并将查询结果转化为Pandas dataframe 安装pymysql 在Python中连接数据库,最常用的是pymysql库。如果你没有安装pymysql,你可以在终端运行以下命令安装: !pip install pymysql 当然,你也可以在命令行中输入…

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