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

如何正确将文本编码为UTF-16BE并转换为对应十六进制字符串

概念差异说明
  • 执行"ABC".encode(encoding="utf-16be")得到的b'\x00A\x00B\x00C'是无BOM的UTF-16大端编码,对应十六进制字符串就是004100420043,和Adobe文档里ABC三个字符本身的编码完全一致,不存在错误。
  • 文档示例中开头的FEFF是UTF-16编码的字节顺序标记(BOM),作用是显式声明当前文本使用大端序UTF-16编码,不属于ABC三个字符的内容本身。utf-16be编码默认不会附带BOM头,这就是输出结果和示例看起来有差异的核心原因。
转换实现方法

生成Adobe示例要求的带BOM字节序列

Python中utf-16编码默认跟随系统字节序,可能输出小端带FFFE头的结果,最稳妥的方式是手动拼接UTF-16大端BOM头:

# 定义UTF-16大端BOM
UTF16_BE_BOM = b'\xFE\xFF'
# 先得到文本本身的无BOM编码
content_bytes = "ABC".encode(encoding="utf-16-be")
# 拼接得到完整带BOM的字节序列
full_bytes = UTF16_BE_BOM + content_bytes
# 验证结果
print(full_bytes)  # 输出 b'\xfe\xff\x00A\x00B\x00C',和目标字节完全匹配

字节序列转大写连续十六进制字符串

直接调用Python字节类型内置的hex()方法,再转大写即可匹配Adobe文档的格式:

# 带BOM的字节序列转目标十六进制字符串
hex_with_bom = b'\xFE\xFF\x00\x41\x00\x42\x00\x43'.hex().upper()
print(hex_with_bom)  # 输出 FEFF004100420043

# 仅提取字符本体的十六进制字符串
hex_content_only = "ABC".encode(encoding="utf-16-be").hex().upper()
print(hex_content_only)  # 输出 004100420043

注意:pdfmark书签的Unicode文本要求必须带FEFF开头的BOM标记,否则会被解析器识别为其他编码导致乱码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:06:18