2014-09-29 40 views
-5

在Python中我有一个字符串S =“Test”。我想将字符串编码为CP1256,ISO-8859-1,ISO-8859-2,ISO-8859-6,ISO-8859-15和Window-1252格式。我怎样才能将字符串编码成上述格式?在Python中对字符串进行编码

+1

你有尝试过什么吗? – 2014-09-29 19:37:48

+0

我试过编码UTF-8,UTF-16和ASCII编码时没有任何错误,但是在提到的编码情况下我遇到了问题。 – 2014-09-30 17:12:38

回答

0

它是codecs模块是什么:

codecs.encode(S,'CP1256') 
+0

为什么使用'codecs.encode(S)'而不是'S.encode'? – abarnert 2014-09-29 20:18:49

-1

只需使用codecs模块

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

如果你想先检查Python是否知道一定编码格式的只是使用

format_name = "iso-8859-6" 
try: 
    codecs.lookup(format_name) 
except LookupError: 
    print "Encoding {} can't be found".format(format_name) 
2

我不知道为什么斯拉瓦巴切里科夫d提出了他的答案,但这是正确的答案,所以我会再详细说明。


str.encode正是你想要什么:

返回字符串作为bytes对象的编码版本。默认编码是'utf-8'。可能会给出错误来设置不同的错误处理方案。错误的默认值是'strict',这意味着编码错误会引起UnicodeError。其他可能的值为'ignore','replace','xmlcharrefreplace','backslashreplace'以及通过codecs.register_error()注册的任何其他名称,请参见部分Codec Base Classes。有关可能的编码列表,请参见部分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')] 

虽然你使用codecs.encode为其他答案建议,真的没有很好的理由这样做,和一个很好的理由不来:str.encode强制执行的事实,您在str对象上调用它,并使用将str转换为bytes的编解码器;如果您不小心在已编码的byteslist或其他东西上使用它,您会得到一个例外。


上述所有的假设你如果你使用的是Python 2使用Python 3,一个str已被编码。因此,如果您可以从unicode对象开始,如u"Test"而不是​​,请执行此操作;如果没有,你会首先想要decode。不幸的是,Python 2不会强制执行该操作;如果你打电话给str.encode,它实际上会用sys.getdefaultencoding进行解码,通常是ASCII,这会导致愚蠢的错误。

+0

谢谢Abarnert最后它的工作......愿上帝保佑你:) – 2014-09-30 17:41:27

相关问题