女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

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

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

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

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

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

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

圖片

2. 默認(rèn)編碼

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

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

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

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

因此,對(duì)于Python2來講,Python解釋器在讀取到中文字符的字節(jié)碼嘗試解碼操作時(shí),會(huì)先查看當(dāng)前代碼文件頭部是否有指明當(dāng)前代碼文件中保存的字節(jié)碼對(duì)應(yīng)的字符編碼是什么。如果沒有指定則使用默認(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來講,執(zhí)行過程是一樣的,只是Python3的解釋器以"UTF-8"作為默認(rèn)編碼,但是這并不表示可以完全兼容中文問題。比如我們?cè)赪indows上進(jìn)行開發(fā)時(shí),Python工程及代碼文件都使用的是默認(rèn)的GBK編碼,也就是說Python代碼文件是被轉(zhuǎn)換成GBK格式的字節(jié)碼保存到磁盤中的。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)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    967

    瀏覽量

    55509
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4825

    瀏覽量

    86225
收藏 人收藏

    評(píng)論

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

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

    `Python中出現(xiàn)亂碼,英文顯示沒問題,一般是中文輸出出現(xiàn)了編碼問題,如果python文件沒有指定編碼,在執(zhí)行過程中就會(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è)方面來解析計(jì)算機(jī)的字符編碼概念

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

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

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

    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ǔ)言都沒有——它的所有函數(shù)都會(huì)有一個(gè)返回值,不管你有沒有寫 return 語(yǔ)句。
    的頭像 發(fā)表于 08-17 11:39 ?2543次閱讀

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

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

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

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

    如何在Ubuntu安裝IDLE Python IDE

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

    Python編碼與解碼

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

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

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

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

    UNICODE字符串可以與任意字符編碼的字節(jié)進(jìn)行相互轉(zhuǎn)換,如圖: 那么大家很容易想到一個(gè)問題,就是不同的字符編碼的字節(jié)可以通過Unicode相互轉(zhuǎn)換嗎?答案是肯定的。 Python2
    的頭像 發(fā)表于 07-05 16:25 ?1383次閱讀
    <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í),并展開討論相應(yīng)的配置、應(yīng)用和注意事項(xiàng)。 一、MySQL數(shù)據(jù)庫(kù)字符編碼簡(jiǎn)介 什么是字符
    的頭像 發(fā)表于 11-16 14:50 ?1930次閱讀

    python如何保存文件

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

    查看python安裝路徑的方法

    。 方法一:使用Python自帶安裝程序的默認(rèn)路徑 Python的安裝程序通常會(huì)將Python解釋器安裝在默認(rèn)的路徑
    的頭像 發(fā)表于 11-29 14:54 ?1.3w次閱讀