Python中字符串的编码

2024-09-24 22:22:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python中有一个字符串S=“Test”。我想把这个字符串编码成CP1256、ISO-8859-1、ISO-8859-2、ISO-8859-6、ISO-8859-15和Window-1252格式。如何将字符串编码成所提到的格式?在


Tags: 字符串test编码格式isowindow成所cp1256
3条回答

它是^{}模块的用途:

codecs.encode(S,'CP1256')

只需使用^{}模块

import codecs
codecs.encode("hello", "iso-8859-6")

如果您想先检查python是否知道某种编码格式,只需使用

^{pr2}$

我不知道为什么斯拉瓦·巴切里科夫删除了他的答案,但这是正确的答案,所以我将更详细地重复一遍。在


^{}正是您想要的:

Return an encoded version of the string as a bytes object. Default encoding is 'utf-8'. errors may be given to set a different error handling scheme. The default for errors is 'strict', meaning that encoding errors raise a UnicodeError. Other possible values are 'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' and any other name registered via codecs.register_error(), see section Codec Base Classes. For a list of possible encodings, see section Standard Encodings.

如果您沿着这个链接到标准编码,您将看到一个很好的表,其中显示了用于每个编码的名称(您可以使用主编解码器名称,也可以使用任何别名)。在

所以:

encoded_bytes = [S.encode(codec) for codec in
                 ('cp1256', 'iso-8859-1', 'iso-8859-2', 'iso-8859-6', 
                  'iso-8859-15', 'windows-1252')]

虽然您可以按照其他答案的建议使用^{},但确实没有什么好的理由这样做,而且有一个很好的理由不这样做:str.encode强化了这样一个事实,即您在一个str对象上调用它,并使用一个将str转换为{}的编解码器;如果不小心在已经编码的byteslist或其他东西上使用它,则会得到一个异常。在


以上所有内容都假设您使用的是python3。如果您使用的是python2,str已经被编码。因此,如果您可以从unicode对象开始,比如u"Test"而不是{},那么就这样做;否则,您需要先decode。不幸的是,Python2不会强制执行这一点;如果您调用str.encode,它实际上会用sys.getdefaultencoding对其进行解码,这通常是ASCII,这将导致愚蠢的错误。在

相关问题 更多 >