如何在 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 文档中,但我没有时间研究它。
我正在创建一个程序来读取 .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 文档中,但我没有时间研究它。