python多平台编码

最近遇到一个几乎每个人会遇到的事情,就是编码的问题。
网上很多事使用

“# coding:utf-8 ”

的解决方案,但是这个方案我始终解决不了我的问题。
首先我使用上述的代码。但是在同个平台下不同的编辑器下,运行的结果也是不同的。
1)python自带ide的获取用户输入并转换成unicode时使用encoding('gb2312'),正常,但是使用encoding('UTF-8')时输入变成ASCII。
2)同样是获取用户输入并转换为unicode时,在cmd下运行时无论是提示字符串还是输入之后,就会报错,改变coding:gbk,提示正常,输入转换正常。
3)同样的功能,在PyCharm,必须使用UTF-8才能正常。
4)同样的功能,在linux,必须使用UTF-8编码才能正常运行。

之前,由于只实验过python自带的IDE和linux下的情况,使用了如下的解决方案:

 IsSystems = sys.platform
    if IsSystems == "win32":
            return '\'gb2312\''
    else:
            return '\'UTF-8\''

但是还是不能解决不同的编辑器下的编码问题。请问这样的问题怎么解决呢?

阅读 4.9k
5 个回答

这个编码问题的参考,你可以在知乎上好好找找,那里面对编码的说明已经很不错了。

当在使用不同的终端的时候,我们先从unicode说起,以‘知乎’为例,‘知乎’的unicode字符编码为u'\u77e5\u4e4e'。

当处于win上的cmd上的时候,是如下情况:


>>>'知乎'
>>>'\xd6\xaa\xba\xf5'
>>>u'\u77e5\u4e4e'.encode('gbk')
>>>'\xd6\xaa\xba\xf5'
>>>u'\u77e5\u4e4e'.encode('utf-8')
>>>'\xe7\x9f\xa5\xe4\xb9\x8e'

所以题主你看,上面的例子说明了当你在一个终端中输入一个字符串的时候,其实终端就已经使用它默认的编码方式为你处理了字符串(表现为编码字符串)。所以你这个时候用decode('gbk')方法处理字符串后,它就会变成unicode的字符编码。unicode编码方式是其它编码方式的基础。

当然在linux上的情况,题主可以重新再试一试。

当然说了这么多题主很可能已经知道的东西,只是想说明我自己的做法,如果说某些文件经常要用一个或几个终端处理的话,将原来终端下的东西转换成unicode字符串,然后再将它转换成另一个平台下所需要的编码方式即可。如果仅仅是两个平台的终端的话,就换一下GBK和UTF-8就可以了。可能效率会低一些。

所有文件存成 UTF-8

用 GBK 写简直是耍流氓

“# coding:utf-8 ” 只是告诉python解释器以什么样的编码方式去运行你的程序,但你的程序本身是否是utf-8编码的跟这个东西一点关系没有,需要自己设置。在pycharm里可以如下设置

clipboard.png

试试这个

import sys
reload(sys)
sys.setdefaultencoding('utf8')
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
2 篇内容引用
推荐问题
宣传栏