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

    python 2023年6月13日
    00
  • R vs. Python 数据分析中谁与争锋?

    R vs. Python 数据分析中谁与争锋? 介绍 在数据科学和机器学习领域,R和Python是两个最流行的编程语言。两者都提供了大量的开发库和工具,可以帮助开发者进行数据分析、可视化、建模和部署。然而,很多人仍然困惑:R和Python哪个更好?这篇文章将对R和Python两种语言的特点进行详细比较和解析。 R的特点 R是一种专门用于数据分析和统计建模的编…

    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 使用csv库处理CSV文件的方法

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

    python 2023年6月13日
    00
  • 解决java读取EXCEL数据变成科学计数法的问题

    要解决Java读取Excel数据变成科学计数法的问题,可以采取以下两种方法: 方法一:使用DecimalFormat格式化数值 第一种方法是使用DecimalFormat来格式化数值,将其转成字符串,从而避免科学计数法的问题。具体操作是,将读取到的数值转为Decimal对象,再使用DecimalFormat格式化成字符串。代码示例如下: import jav…

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

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

    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如何在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
合作推广
合作推广
分享本页
返回顶部