1

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

谢谢

4

1 回答 1

3

是否可以在 python 中将 cp850 映射到 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)
于 2013-10-24T15:40:24.310 回答