Python編碼問題

默認編碼

字符串

python2 文本字符串默認編碼是ASCII罐脊,中文默認UTF-8
python3 文本字符串默認編碼是Unicode

解釋器

python2 解釋器編碼默認是ASCII
python3 解釋器編碼默認是UTF-8

encode\decode

非Unicode 進行 decode 返回Unicode
Unicode 進行 encode 返回非Unicode


寫入文件

"w"

python3

  • "w"只能寫Unicode

python2

  • "w" 方法可以寫入Unicode和非Unicode
  • "w" 方法如果寫入Unicode會自動轉(zhuǎn)成解釋器的默認編碼手销。

想使用python2寫入中文
必須是Unicode的中文
1.修改解釋器編碼為utf-8廊佩,這樣就可以處理包含中文的Unicode字符串寫入了

# coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
a = u"世界"
with open('utf8.txt','w') as f:
    f.write(a)

注意:使用這種方法請不要使用pycharm缤至,原生python2.7中會有這個方法碎绎,但是pycharm把這個方法屏蔽了

  1. 使用codecs模塊寫入文件略步,將Unicode字符串按encoding參數(shù)指定的編碼寫入:
# coding:utf-8
import codecs
unicode_str = u"世界"
with codecs.open("hello.txt", "w", encoding="utf-8") as :
    f.write(unicode_str)

"w" 方法寫入非Unicode,英文會直接寫入盯滚,中文只能在使用上面的方法一才能寫入踢械。
例如已經(jīng)將Unicode.decode("utf-8"),就寫入utf-8。


"wb"

python3

  • "wb" 方法只能寫入非Unicode

python2

  • "wb"方法只能寫入非Unicode字符串("utf-8"魄藕、"GBK"等)

讀取文件

"r"

  • python3 r 讀出來的是Unicode
  • python2 r讀出來的是非Unicode

"rb"

  • python3 rb 讀出來的非Unicode
  • python2 rb 讀出來的是非Unicode

查看系統(tǒng)默認編碼

import sys
# 打印出系統(tǒng)默認編碼方式
print(sys.getdefaultencoding())

修改默認編碼

# 修改系統(tǒng)默認編碼
sys.setdefaultencoding('utf8')

類Unicode字符串轉(zhuǎn)換成Unicode字符串

將一個類Unicode字符串(長得像Unicode内列,但是它是個普通字符串),解碼為真正的Unicode

# python2中
s = "\u4f60\u597d\u4e16\u75c"
# 這樣操作它就變成真正的Unicode
unicodee_str = s.decode("unicode-escape")
print(unicodee_str) # u"\u4f60\u597d\u4e16\u75c"

注意:不管python2還是python3 遇到類Unicode碼(類似于這種"\u4f60\u597d\u4e16\u75c")它其實是長得像Unicode碼的Unicode碼背率;
先變成非Unicode话瞧,之后再decode("unicode-escape"),可以將類Unicode變成Unicode碼寝姿。

Json化寫入文件

將字典json化保存成系統(tǒng)指定編碼
如果python2會將unicode字符串編碼成ascii保存成文件交排,這時候就需要兩步

  1. 指定編碼寫入
  2. json.dumps(字典,ensure_ascii=False)
# coding:utf-8
class TencentPipeline(object):
    def open_spider(self,spider):
    # 按指定編碼保存文件
        self.f = codecs.open("tencent.json", "w",encoding='utf-8')

    def process_item(self,item,spider):
        # ensure_ascii=False不以ascii編碼保存文件
        json_str = json.dumps(dict(item),ensure_ascii=False) + ',\n'
        self.f.write(json_str)
        return item

    def close_spider(self,spider):
        self.f.close()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末会油,一起剝皮案震驚了整個濱河市个粱,隨后出現(xiàn)的幾起案子古毛,更是在濱河造成了極大的恐慌翻翩,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稻薇,死亡現(xiàn)場離奇詭異嫂冻,居然都是意外死亡,警方通過查閱死者的電腦和手機塞椎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門桨仿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人案狠,你說我怎么就攤上這事服傍。” “怎么了骂铁?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵吹零,是天一觀的道長。 經(jīng)常有香客問我拉庵,道長灿椅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮茫蛹,結(jié)果婚禮上操刀,老公的妹妹穿的比我還像新娘。我一直安慰自己婴洼,他們只是感情好骨坑,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著窃蹋,像睡著了一般卡啰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上警没,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天匈辱,我揣著相機與錄音,去河邊找鬼杀迹。 笑死亡脸,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的树酪。 我是一名探鬼主播浅碾,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼续语!你這毒婦竟也來了垂谢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤疮茄,失蹤者是張志新(化名)和其女友劉穎滥朱,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體力试,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡徙邻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了畸裳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缰犁。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖怖糊,靈堂內(nèi)的尸體忽然破棺而出帅容,到底是詐尸還是另有隱情,我是刑警寧澤伍伤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布并徘,位于F島的核電站,受9級特大地震影響嚷缭,放射性物質(zhì)發(fā)生泄漏饮亏。R本人自食惡果不足惜耍贾,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一路幸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧简肴,春花似錦晃听、人聲如沸砰识。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽初斑。三九已至膨处,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間真椿,已是汗流浹背鹃答。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工突硝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人解恰。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓锋八,卻偏偏與公主長得像,于是被迫代替她去往敵國和親修噪。 傳聞我的和親對象是個殘疾皇子查库,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 幾個基本概念 bit二進制位路媚, 是計算機內(nèi)部數(shù)據(jù)儲存的最小單位黄琼,11010100是一個8位二進制數(shù)。一個二進制位只...
    西電大俠閱讀 3,559評論 1 8
  • 什么是編碼 任何一種語言整慎、文字脏款、符號等等,計算都是將其以一種類似字典的形式存起來的裤园,比如最早的計算機系統(tǒng)將英文文字...
    隨風(fēng)化作雨閱讀 1,526評論 1 2
  • 寫python的過程中經(jīng)常出現(xiàn)各種蛋疼的編碼問題撤师,于是通過上網(wǎng)查資料,自己做實驗拧揽,想徹底搞清楚這個問題剃盾。 編碼和解...
    allen哦閱讀 515評論 0 1
  • 繼上一篇文章字符集和編碼詳解總結(jié)了常見字符編碼后腺占,這篇文章會對python中常見的編碼問題進行分析和總結(jié)。由于py...
    __七把刀__閱讀 2,890評論 0 6
  • 閱讀python源代碼的時候不難發(fā)現(xiàn)許多文件開頭都有這樣一行內(nèi)容: 如果想在python中使用中文痒谴,這樣的一行聲明...
    Fengya閱讀 749評論 0 50