我已经阅读了这篇文章:
我试图遵循以下原则:"始终在内部使用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字符串,所以我认为这是正常的(如果我理解有误,请纠正我)
- 当我在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/shell ssh:
import sys sys.stdout.encoding
我得到了'UTF-8'
- Linux/shell 在我的代码中:
import sys sys.stdout.encoding
我得到了None
,这是什么情况? - Windows/Pycharm:
import sys sys.stdout.encoding
我得到了'windows-1252'
什么是使这在两个环境下正常工作的最佳方法?
utf-8
格式打开文件,并且在代码中始终使用u"anystring"
。当然,文件必须保存为utf-8格式。这样我就不会遇到太多问题了。如果你正在使用IDE,也必须将其配置为默认读取utf-8,同样适用于shell。这可能对你没有帮助,但这是我避免遇到太多编码问题的方法。 - colidyre