【问题标题】:Map cp850 to unicode in Python在 Python 中将 cp850 映射到 unicode
【发布时间】:2013-10-24 23:40:24
【问题描述】:

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

谢谢

【问题讨论】:

  • 既然您已经将文件转换为 UTF-8,为什么还要使用 u'\u2588' 字符的 CP850 表示?

标签: python unicode


【解决方案1】:

是否可以在python中将cp850映射到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)

【讨论】:

  • 写回文件时不应该是"encoding='cp850'"吗?
  • @DoneDataSolutions OP 已将文件转换为 UTF-8。阅读问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 1970-01-01
  • 2020-12-17
  • 1970-01-01
相关资源
最近更新 更多