python多平台编码
高洛峰
高洛峰 2017-04-17 16:30:10
0
5
383

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

“# 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\''

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

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(5)
小葫芦

這個編碼問題的參考,你可以在知乎上好好找找,那裡面對編碼的說明已經很不錯了。

當在使用不同的終端機的時候,我們先從unicode說起,以『知乎』為例,『知乎』的unicode字元編碼為u'u77e5u4e4e'。

當處於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裡可以如下設定

Peter_Zhu

在windows-中文版寫Python就要做好與程式設計鬥爭的準備

我的經驗在這裡http://segmentfault.com/a/1190000004018799

Peter_Zhu

試試這個

import sys
reload(sys)
sys.setdefaultencoding('utf8')
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!