没有内置的功能来解码这样的字符串,因为它是真正的自己的定制编解码器.您只需要分割这些控制字符上的字符串并相应地进行解码.
这是一个(非常慢)的例子,这个函数可以处理latin1和shift-JIS:
latin1 = "latin-1"
japanese = "Shift-JIS"
control_l = "\x0c"
control_j = "\n"
encodingMap = {
control_l: latin1,control_j: japanese}
def funkyDecode(s,initialCodec=latin1):
output = u""
accum = ""
currentCodec = initialCodec
for ch in s:
if ch in encodingMap:
output += accum.decode(currentCodec)
currentCodec = encodingMap[ch]
accum = ""
else:
accum += ch
output += accum.decode(currentCodec)
return output
更快的版本可能使用str.split或正则表达式.
(另外,在本例中可以看到,“^ J”是“换行符”的控制字符,所以输入的数据将会有一些有趣的限制.)