📜  对包含非 utf 值的数组进行编码 (1)

📅  最后修改于: 2023-12-03 15:39:09.697000             🧑  作者: Mango

对包含非 utf 值的数组进行编码

当我们需要在程序中处理包含非 UTF 字符的数组时,需要进行编码方案来确保这些值可以正确处理。下面介绍几种常见的编码方案。

UTF-8 编码

UTF-8 是一种可变长度的编码方案,通过将 Unicode 码点映射成 1~4 个字节来实现对任意 Unicode 字符的编码。UTF-8 的编码过程如下:

  1. 对于 Unicode 码点 U <= 0x7F,UTF-8 编码为一个字节 0xxxxxxx,其中 x 表示码点的 7 位二进制表示。

  2. 对于 Unicode 码点 U >= 0x80,UTF-8 编码为两个及以上字节。具体编码规则如下:

    • 对于 U 值小于等于 0x7FF(11位二进制数),需要使用两个字节:110xxxxx 10xxxxxx
    • 对于 U 值在 0x0800 到 0xFFFF(16位二进制数之间),需要使用三个字节:1110xxxx 10xxxxxx 10xxxxxx
    • 对于 U 值在 0x10000 到 0x10FFFF,需要使用四个字节:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

UTF-8 的编码方式可以在大部分编程语言中实现,下面是 Python 中将包含非 UTF 值的数组编码成 UTF-8 的代码示例:

# 将一个包含非 UTF 值的数组编码为 UTF-8
arr = [0xB2, 0xE2, 0xCA, 0xD4, 0xC9, 0xCF]
utf8_encoded_arr = bytes(arr).decode('GB18030').encode('utf-8')
Base64 编码

Base64 是一种将二进制数据编码成 ASCII 码的编码方式,适合传输需要在 HTTP 协议、电子邮件等中传输二进制数据的场景。编码的过程如下:

  1. 将二进制数据按照 3 个字节一组进行分组。
  2. 对于每一组的 3 个字节,分别将其每 6 个比特位拆分成 4 个字节,共 4x3=12 个字节。
  3. 对这 12 个字节分别进行 Base64 字符映射,映射表中包含大小写字母、数字和 '+', '/' 两个符号。
  4. 如果不够 3 的倍数,需要进行填充(一般用 '=' 字符),使其长度为 3 的倍数。

Base64 的编码方式也可以在大部分编程语言中实现,下面是 Python 中将包含非 UTF 值的数组编码成 Base64 的代码示例:

# 将一个包含非 UTF 值的数组编码为 Base64
import base64
arr = [0xB2, 0xE2, 0xCA, 0xD4, 0xC9, 0xCF]
b64_encoded_arr = base64.b64encode(bytes(arr))
URL 编码

当我们需要将一些需要进行 URL 传输的字符串进行传输时,需要使用 URL 编码,以确保它们在传输过程中不会被中间的代理服务器、防火墙等处理程序对其进行修改。URL 编码采用 %xx 的方式对每个字节进行编码,其中 xx 代表该字节的 16 进制表示。

URL 编码的方式也可以在大部分编程语言中实现,下面是 Python 中将包含非 UTF 值的数组编码成 URL 编码的代码示例:

# 将一个包含非 UTF 值的数组编码为 URL 编码
import urllib.parse
arr = [0xB2, 0xE2, 0xCA, 0xD4, 0xC9, 0xCF]
url_encoded_arr = urllib.parse.quote(bytes(arr))

以上就是三种编码方案的介绍,希望能对您在处理包含非 UTF 值的数组时有所帮助。