簡體   English   中英

如何在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雙字節的數字。 例如,“これは日本語。”表示為“\\'\\ n'\\'\\ n \\ n \\ n \\ n \\ n \\ n \\ n \\ n \\ n \\ n \\ _ \\ _ \\ b \\ \\'\\'\\'\\'\\'\\'\\'\\'\\'\\'\\'\\'\\'\\'\\'\\'\\'\\'\\'\\'\\'\\'\\'\\'\\'\\'\\'\\' \\ '81 \\ '42" 。

出於我的程序的目的,代碼頁始終是“cpg1252”。

如何將“\\'xx”序列轉換為UTF-8字符串? 我試着玩編解碼器,但我得到的只是胡言亂語。

您似乎在代碼頁轉義中包含Shift-JIS數據 ; 你可以提取標記的字節並解碼那些:

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是Windows上的代碼頁932:

>>> 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文件,但我沒有時間來研究這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM