我已經讀完了這一點:Python 2.7版的Unicode混亂再次
Setting the correct encoding when piping stdout in Python
我試圖堅持使用經驗法則:「總是在內部使用Unicode解碼收到的東西,編碼你送什麼「
因此,這裏是我的主要文件。
# coding: utf-8
import os
import sys
from myplugin import MyPlugin
if __name__ == '__main__':
c = MyPlugin()
a = unicode(open('myfile.txt').read().decode('utf8'))
print(c.generate(a).encode('utf8'))
是什麼讓我心煩的是:
- 我讀了一個utf8文件,所以我解碼它。
- 然後我強迫其轉換爲Unicode這給
unicode(open('myfile.txt').read().decode('utf8'))
- 然後我試着將它輸出到終端
- 在我的Linux外殼,我需要重新編碼爲utf8,並我想這是正常因爲我一直在unicode字符串上工作,然後輸出它,我必須重新編碼它在utf8(糾正我,如果我在這裏是錯誤的)
- 當我在Windows下使用Pycharm運行它,它是兩次utf8編碼,這給了我像
agréable, déjÃ
的東西。所以,如果我刪除encode('utf8')
(更改最後一行print(c.generate(a))
那麼它與Pycharm,但不會再使用Linux,在那裏我得到工作:布拉布拉你知道問題'ascii' codec can't encode character u'\xe9' in position
如果我嘗試在命令行:
- 的Linux /殼SSH:
import sys sys.stdout.encoding
我得到'UTF-8'
- 的Linux /殼在我的代碼:
import sys sys.stdout.encoding
我得到None
WTF? - 的Windows/Pycharm:
import sys sys.stdout.encoding
我得到'windows-1252'
什麼是實現代碼,以便它可以在這兩種環境的最佳方法是什麼?
我喜歡使用[codecs](https://docs.python.org/2.7/library/codecs.html)在'utf-8'中打開文件,並且始終在代碼中使用'u「anystring」' 。當然,該文件必須保存在utf-8中。那時我沒有太多問題。如果您使用的是IDE,則必須將其配置爲默認讀取utf-8,也可以使用shell。這可能對你沒有任何幫助,但這是我避免陷入很多編碼問題的方法。 – colidyre