将cp850映射到Python中的unicode

时间:2013-10-22 17:49:42

标签: python unicode

是否可以将cp850映射到python中的unicode?您可能会问,我为什么要这样做:我使用cp850获得了一个文本文件,我必须创建一个数据库。因此,使用了一些用于文本格式化的字符,例如█(CP850:0xDB)用作换行符。所以我首先将文件转换为UTF-8,以使其更易于人类阅读。下一步是填充数据库并将特殊字符更改为合适的控件字符(\ n,\ t,...)。但转换过程(当然)会导致其数值表示发生变化,例如从0xDB到0x2588的换行。有解决方案可以解决这个问题吗?或者我是否必须自己映射代码?

由于

1 个答案:

答案 0 :(得分:2)

  

是否可以将cp850映射到python中的unicode?

当然,只需解码数据的字节(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)