如何在 Python 中将 UTF-16 字节序列的字符串表示形式转换为 UTF-8?

How do you convert a string representation of a UTF-16 byte sequence to UTF-8 in Python?

我正在创建一个程序来读取 .rtf 文件。 .rtf 文件以 ASCII 编码,但用转义序列表示非 ASCII 字符,后跟两个表示 UTF-16 双字节的数字。例如,“これは日本语。”表示为“\'82\'b1\'82\'ea\'82\'cd\'93\'fa\'96\'7b\'8c\'ea \'81\'42".

就我的程序而言,代码页始终为 "cpg1252"。

如何将“\'xx”序列转换为 UTF-8 字符串?我尝试使用编解码器,但我得到的只是乱码。

您似乎有 Shift-JIS data inside code-page escapes;您可以提取标记的字节并对其进行解码:

import re
from binascii import unhexlify

cp_escapes = re.compile(r"\'([0-9a-fA-F]{2})")

def extract_cp_escapes(data):
    return unhexlify(''.join(marked_bytes.findall(data)))

然后解码; Shift-JIS 是代码页 932 Windows:

>>> text = r"\'82\'b1\'82\'ea\'82\'cd\'93\'fa\'96\'7b\'8c\'ea\'81\'42"
>>> extract_cp_escapes(text)
'\x82\xb1\x82\xea\x82\xcd\x93\xfa\x96{\x8c\xea\x81B'
>>> print extract_marked_bytes(text).decode('cp932')
これは日本語。

如果需要,您可以将其解码为 UTF-8 等其他编解码器。

可能可能使用的确切代码页也被编码在 RTF 文档中,但我没有时间研究它。