You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何直接获取UTF-16代码单元列表及反向转UTF-8?

UTF-8与UTF-16代码单元的互转方案

1. 从UTF-8字节串获取UTF-16代码单元整数列表

要直接得到UTF-16代码单元的整数列表,核心是先将UTF-8解码为Unicode字符串(这是绕不开的中间步骤,因为UTF-8和UTF-16都是基于Unicode的编码方案),再将字符串转换为UTF-16编码的字节串,最后把每两个字节(UTF-16 BE的单代码单元长度)转换为16位整数。

示例代码:

# 原始UTF-8字节串
utf8_bytes = b'ab\xc3\xa7'

# 解码为Unicode字符串
unicode_str = utf8_bytes.decode('utf-8')

# 转换为UTF-16 BE字节串
utf16_be_bytes = unicode_str.encode('utf-16-be')

# 每两个字节转换为一个UTF-16代码单元(16位整数)
utf16_code_units = [
    int.from_bytes(utf16_be_bytes[i:i+2], byteorder='big')
    for i in range(0, len(utf16_be_bytes), 2)
]

print(utf16_code_units)  # 输出: [97, 98, 231]

注:你提到的[32, 33, 327]应为笔误,实际对应字符a/b/ç的UTF-16代码单元十进制值是97、98、231。

2. 将UTF-16代码单元整数列表转回UTF-8编码

反向转换的逻辑是先把每个16位代码单元转回UTF-16 BE字节串,解码为Unicode字符串后再编码为UTF-8。

示例代码:

# UTF-16代码单元整数列表
utf16_code_units = [97, 98, 231]

# 将每个代码单元转换为2字节的大端字节串并拼接
utf16_be_bytes = b''.join([
    cu.to_bytes(2, byteorder='big')
    for cu in utf16_code_units
])

# 解码为Unicode字符串
unicode_str = utf16_be_bytes.decode('utf-16-be')

# 编码为UTF-8字节串
utf8_bytes = unicode_str.encode('utf-8')

print(utf8_bytes)  # 输出: b'ab\xc3\xa7'

内容的提问来源于stack exchange,提问作者Andy Jewell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 21:53:10