2014-09-29 80 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

相關問題