是否可以将cp850映射到python中的unicode?您可能会问,我为什么要这样做:我使用cp850获得了一个文本文件,我必须创建一个数据库。因此,使用了一些用于文本格式化的字符,例如█(CP850:0xDB)用作换行符。所以我首先将文件转换为UTF-8,以使其更易于人类阅读。下一步是填充数据库并将特殊字符更改为合适的控件字符(\ n,\ t,...)。但转换过程(当然)会导致其数值表示发生变化,例如从0xDB到0x2588的换行。有解决方案可以解决这个问题吗?或者我是否必须自己映射代码?
由于
答案 0 :(得分:2)
是否可以将cp850映射到python中的unicode? p>
当然,只需解码数据的字节(Python 3示例):
>>> s=b'\xcdABCDEF\xcd\xdbHIJKLMNOP'.decode('cp850')
>>> s
'═ABCDEF═█HIJKLMNOP'
我是否必须自己映射代码?
只需要翻译的字节数。对于使用映射字典的Unicode字符串,有一种方便的.translate
方法:
>>> D={}
>>> D['\u2588'] = '\n' # Make translation entry in dictionary
>>> s.translate(D)
'═ABCDEF═\nHIJKLMNOP'
完成后,以UTF-8编码输出:
>>> s.translate(D).encode('utf8')
b'\xe2\x95\x90ABCDEF\xe2\x95\x90\nHIJKLMNOP'
关键是在读取数据时解码为Unicode,以Unicode进行所有处理,然后在将数据发送到存储时编码回数据。例如,到文件:
with open('out.txt','w',encoding='utf8') as f:
f.write(s)