我試圖寫一個包含西里爾符號(以UTF-8)格式的字符串爲Unix管道都:如何編碼字符串轉換爲UTF-8的Python 2.x和3.x
sort_proc.stdin.write("{}\n".format(cyrillic_text).decode('utf-8').encode('utf-8'))
我不得不編碼,因爲'str' does not support the buffer interface
和解碼,因爲'ascii' codec can't decode byte 0xd0
。所以這個代碼按照預期在Python 2.7中工作。但Python 3.4說'str' object has no attribute 'decode'
python3中的字符串文字已經被「解碼」了。所以我知道如何分別爲每個版本修復它,但不知道如何解決這兩個問題。我發現了一個與重新加載sys模塊和設置setdefaultencoding有關的解決方案,但是這篇文章why should we NOT use sys.setdefaultencoding表示這只是一個黑客,不應該被使用。請張貼這些事情的最pythonic方式。謝謝。
可以執行根據版本不同的代碼:'如果sys.version_info [0] == 2:....其他:....' – DyZ
什麼'.decode( 'UTF-8')。編碼('utf-8')'實現?看起來不太有意義。 –
@StefanPochmann我認爲編碼沒有解碼使用默認ascii編解碼器,這就是爲什麼它不能解碼'0xd0'。一般來說,它不使用python2編碼,但不能在python3 – Alex