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

时间:2016-07-09 17:34:57

标签: python encoding utf-8 utf-16

我正在创建一个读取.rtf文件的程序。 .rtf文件以ASCII编码,但表示非ASCII字符,其中包含转义序列,后跟两个表示UTF-16双字节的数字。例如,“これは日本语。”表示为“\'\ n'\'\ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ _ \ _ \ b \ \'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\' \ '81 \ '42" 。

出于我的程序的目的,代码页始终是“cpg1252”。

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

1 个答案:

答案 0 :(得分:0)

Shift-JIS data内似乎有code-page escapes;你可以提取标记的字节并解码它们:

>>> 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')
これは日本語。

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

{{1}}

如果需要,您可以将其解码为另一个编解码器,如UTF-8。

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