在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python中的默認(rèn)編碼

麥辣雞腿堡 ? 來(lái)源:Python都知道 ? 作者:了不起 ? 2023-07-05 16:11 ? 次閱讀

####1. Python源代碼文件的執(zhí)行過(guò)程

我們都知道,磁盤(pán)上的文件都是以二進(jìn)制格式存放的,其中文本文件都是以某種特定編碼的字節(jié)形式存放的。對(duì)于程序源代碼文件的字符編碼是由編輯器指定的,比如我們使用Pycharm來(lái)編寫(xiě)Python程序時(shí)會(huì)指定工程編碼和文件編碼為UTF-8,那么Python代碼被保存到磁盤(pán)時(shí)就會(huì)被轉(zhuǎn)換為UTF-8編碼對(duì)應(yīng)的字節(jié)(encode過(guò)程)后寫(xiě)入磁盤(pán)。當(dāng)執(zhí)行Python代碼文件中的代碼時(shí),Python解釋器在讀取Python代碼文件中的字節(jié)串之后,需要將其轉(zhuǎn)換為UNICODE字符串(decode過(guò)程)之后才執(zhí)行后續(xù)操作。

上面已經(jīng)解釋過(guò),這個(gè)轉(zhuǎn)換過(guò)程(decode,解碼)需要我們指定文件中保存的字節(jié)使用的字符編碼是什么,才能知道這些字節(jié)在UNICODE這張萬(wàn)國(guó)碼和統(tǒng)一碼中找到其對(duì)應(yīng)的代碼點(diǎn)是什么。這里指定字符編碼的方式大家都很熟悉,如下所示:

# -*- coding:utf-8 -*-

圖片

2. 默認(rèn)編碼

那么,如果我們沒(méi)有在代碼文件開(kāi)始的部分指定字符編碼,Python解釋器就會(huì)使用哪種字符編碼把從代碼文件中讀取到的字節(jié)轉(zhuǎn)換為UNICODE代碼點(diǎn)呢?就像我們配置某些軟件時(shí),有很多默認(rèn)選項(xiàng)一樣,需要在Python解釋器內(nèi)部設(shè)置默認(rèn)的字符編碼來(lái)解決這個(gè)問(wèn)題,這就是文章開(kāi)頭所說(shuō)的“默認(rèn)編碼”。因此大家所說(shuō)的Python中文字符問(wèn)題就可以總結(jié)為一句話: 當(dāng)無(wú)法通過(guò)默認(rèn)的字符編碼對(duì)字節(jié)進(jìn)行轉(zhuǎn)換時(shí),就會(huì)出現(xiàn)解碼錯(cuò)誤(UnicodeEncodeError)

Python2和Python3的解釋器使用的默認(rèn)編碼是不一樣的,我們可以通過(guò)sys.getdefaultencoding()來(lái)獲取默認(rèn)編碼:

>> > # Python2
 >> > import sys
 >> > sys.getdefaultencoding()
'ascii'

 >> > # Python3
 >> > import sys
 >> > sys.getdefaultencoding()
'utf-8'

因此,對(duì)于Python2來(lái)講,Python解釋器在讀取到中文字符的字節(jié)碼嘗試解碼操作時(shí),會(huì)先查看當(dāng)前代碼文件頭部是否有指明當(dāng)前代碼文件中保存的字節(jié)碼對(duì)應(yīng)的字符編碼是什么。如果沒(méi)有指定則使用默認(rèn)字符編碼"ASCII"進(jìn)行解碼導(dǎo)致解碼失敗,導(dǎo)致如下錯(cuò)誤:

SyntaxError: Non-ASCII character '\\xc4' in file xxx.py on line 11, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

對(duì)于Python3來(lái)講,執(zhí)行過(guò)程是一樣的,只是Python3的解釋器以"UTF-8"作為默認(rèn)編碼,但是這并不表示可以完全兼容中文問(wèn)題。比如我們?cè)赪indows上進(jìn)行開(kāi)發(fā)時(shí),Python工程及代碼文件都使用的是默認(rèn)的GBK編碼,也就是說(shuō)Python代碼文件是被轉(zhuǎn)換成GBK格式的字節(jié)碼保存到磁盤(pán)中的。Python3的解釋器執(zhí)行該代碼文件時(shí),試圖用UTF-8進(jìn)行解碼操作時(shí),同樣會(huì)解碼失敗,導(dǎo)致如下錯(cuò)誤:

SyntaxError: Non-UTF-8 code starting with '\\xc4' in file xxx.py on line 11, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

3. 最佳實(shí)踐

  • 創(chuàng)建一個(gè)工程之后先確認(rèn)該工程的字符編碼是否已經(jīng)設(shè)置為UTF-8
  • 為了兼容Python2和Python3,在代碼頭部聲明字符編碼:-*- coding:utf-8 -*-
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    967

    瀏覽量

    55581
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4825

    瀏覽量

    86355
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Python中文亂碼怎么處理?python中文亂碼解決辦法

    `Python中出現(xiàn)亂碼,英文顯示沒(méi)問(wèn)題,一般是中文輸出出現(xiàn)了編碼問(wèn)題,如果python文件沒(méi)有指定編碼,在執(zhí)行過(guò)程中就會(huì)出現(xiàn)報(bào)錯(cuò)!
    發(fā)表于 12-27 15:13

    python默認(rèn)的解釋器并不支持tab補(bǔ)全

    雖然python在linux系統(tǒng)默認(rèn)安裝的,但是python默認(rèn)的解釋器并不支持tab補(bǔ)全,所以推薦使用ipython。
    發(fā)表于 07-11 07:22

    從5個(gè)方面來(lái)解析計(jì)算機(jī)的字符編碼概念

    字符編碼是計(jì)算機(jī)編程不可回避的問(wèn)題,不管你用 Python2 還是 Python3,亦或是 C++, Java 等,我都覺(jué)得非常有必要厘清計(jì)算機(jī)
    的頭像 發(fā)表于 01-16 09:08 ?8212次閱讀
    從5個(gè)方面來(lái)解析計(jì)算機(jī)<b class='flag-5'>中</b>的字符<b class='flag-5'>編碼</b>概念

    從RHEL 8 Beta開(kāi)始不再默認(rèn)系統(tǒng)Python版本

    為了改善用戶體驗(yàn),從 RHEL 8 Beta 開(kāi)始不再?gòu)?qiáng)調(diào)“系統(tǒng) Python”,不再默認(rèn)一個(gè) Python 版本。
    的頭像 發(fā)表于 12-30 14:23 ?2158次閱讀

    Python編碼規(guī)范是怎么樣的

    建議使用Emacs 的Python-mode 默認(rèn)值: 4 個(gè)空格一個(gè)縮進(jìn)層次。對(duì)于確實(shí)古老的代碼,若不希望產(chǎn)生混亂,可以繼續(xù)使用8 空格的制表符。在Emacs 的Python-mode 中會(huì)自動(dòng)
    發(fā)表于 08-12 16:03 ?3次下載
    <b class='flag-5'>Python</b>的<b class='flag-5'>編碼</b>規(guī)范是怎么樣的

    科普:Python函數(shù)默認(rèn)返回 None 的原因

    Python 有一項(xiàng)默認(rèn)的做法,很多編程語(yǔ)言都沒(méi)有——它的所有函數(shù)都會(huì)有一個(gè)返回值,不管你有沒(méi)有寫(xiě) return 語(yǔ)句。
    的頭像 發(fā)表于 08-17 11:39 ?2550次閱讀

    Python 函數(shù)默認(rèn)返回None的原因

    Python 函數(shù)默認(rèn)返回None是什么原因?定義的函數(shù)沒(méi)有返回值,Python 解釋器就會(huì)強(qiáng)行地默認(rèn)給注入一段返回邏輯!實(shí)際上 Python
    的頭像 發(fā)表于 08-21 10:51 ?2857次閱讀
    <b class='flag-5'>Python</b> 函數(shù)<b class='flag-5'>默認(rèn)</b>返回None的原因

    Python中最基本的10個(gè)內(nèi)容

    時(shí)會(huì)遇上亂碼問(wèn)題,其原因是字符集的編碼問(wèn)題。Linux和Mac默認(rèn)編碼集是UTF8,而Windows則是
    發(fā)表于 12-11 11:54 ?1806次閱讀

    如何在Ubuntu安裝IDLE Python IDE

    當(dāng)初學(xué)Python時(shí),設(shè)置編碼環(huán)境可能會(huì)很具有挑戰(zhàn)性。IDLE(集成開(kāi)發(fā)和學(xué)習(xí)環(huán)境)是一個(gè)Python IDE,可簡(jiǎn)化相同的過(guò)程。安裝后,您可以立即開(kāi)始編碼
    的頭像 發(fā)表于 04-10 10:29 ?998次閱讀

    Python編碼與解碼

    先做下科普:UNICODE字符編碼,也是一張字符與數(shù)字的映射,但是這里的數(shù)字被稱為代碼點(diǎn)(code point), 實(shí)際上就是十六進(jìn)制的數(shù)字。 Python官方文檔對(duì)Unicode字符串、字節(jié)串
    的頭像 發(fā)表于 07-05 15:59 ?950次閱讀

    Python2與Python3對(duì)字符串的支持

    其實(shí)Python3對(duì)字符串支持的改進(jìn),不僅僅是更改了默認(rèn)編碼,而是重新進(jìn)行了字符串的實(shí)現(xiàn),而且它已經(jīng)實(shí)現(xiàn)了對(duì)UNICODE的內(nèi)置支持,從這方面來(lái)講
    的頭像 發(fā)表于 07-05 16:15 ?946次閱讀

    Python字符編碼轉(zhuǎn)換

    UNICODE字符串可以與任意字符編碼的字節(jié)進(jìn)行相互轉(zhuǎn)換,如圖: 那么大家很容易想到一個(gè)問(wèn)題,就是不同的字符編碼的字節(jié)可以通過(guò)Unicode相互轉(zhuǎn)換嗎?答案是肯定的。 Python2
    的頭像 發(fā)表于 07-05 16:25 ?1408次閱讀
    <b class='flag-5'>Python</b>字符<b class='flag-5'>編碼</b>轉(zhuǎn)換

    mysql數(shù)據(jù)庫(kù)默認(rèn)字符編碼是什么

    MySQL數(shù)據(jù)庫(kù)的默認(rèn)字符編碼是utf8mb4。下面我將詳細(xì)介紹MySQL數(shù)據(jù)庫(kù)的字符編碼相關(guān)知識(shí),并展開(kāi)討論相應(yīng)的配置、應(yīng)用和注意事項(xiàng)。 一、MySQL數(shù)據(jù)庫(kù)字符編碼簡(jiǎn)介 什么是字符
    的頭像 發(fā)表于 11-16 14:50 ?1946次閱讀

    python如何保存文件

    ( 'Hello, world!' ) 在上面的例子,'filename.txt'是文件的路徑,'w'是打開(kāi)文件的模式,表示寫(xiě)入模式,encoding參數(shù)可選,指定文件的編碼方式,默認(rèn)為系統(tǒng)的
    的頭像 發(fā)表于 11-24 09:32 ?1579次閱讀

    查看python安裝路徑的方法

    。 方法一:使用Python自帶安裝程序的默認(rèn)路徑 Python的安裝程序通常會(huì)將Python解釋器安裝在默認(rèn)的路徑
    的頭像 發(fā)表于 11-29 14:54 ?1.3w次閱讀
    主站蜘蛛池模板: 深爱婷婷 | 午夜免费观看福利片一区二区三区 | 成人午夜精品久久久久久久小说 | 特级毛片s级全部免费 | 特级毛片aaaaaa蜜桃 | 日本伊人网 | 亚洲视频一区在线观看 | 久久精品国产2020观看福利色 | 国产精品毛片久久久久久久 | 国产成人99久久亚洲综合精品 | 亚洲午夜精品久久久久久人妖 | 久久国产精品99精品国产987 | 男男np主受高h啪啪肉 | 亚洲综合五月天欧美 | 色天天综合色天天天天看大 | 女性一级全黄生活片在线播放 | 久久精品国产99国产精品免费看 | 日本成人免费 | 午夜视频在线 | 性香港xxxxx免费视频播放 | 欧美一级高清免费播放 | 久久夜色精品国产飘飘 | 国产精品免费久久久久影院 | 四虎国产精品永久在线 | 国内视频一区二区 | 99pao强力打造免费高清色 | 亚洲一区免费在线观看 | 亚洲成年人免费网站 | 亚洲国产欧美在线成人aaaa | 午夜精品一区二区三区在线观看 | 视频一区中文字幕 | 久久黄色录像 | 毛片午夜| 午夜视频欧美 | 亚欧成人乱码一区二区 | 久久久噜噜噜久久久午夜 | 亚洲swag精品自拍一区 | 美女被视频网站在线看九色 | 一区二区亚洲视频 | 天天躁夜夜躁 | 亚洲电影在线 |