精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python中的默認編碼

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

####1. Python源代碼文件的執行過程

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

上面已經解釋過,這個轉換過程(decode,解碼)需要我們指定文件中保存的字節使用的字符編碼是什么,才能知道這些字節在UNICODE這張萬國碼和統一碼中找到其對應的代碼點是什么。這里指定字符編碼的方式大家都很熟悉,如下所示:

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

圖片

2. 默認編碼

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

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

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

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

因此,對于Python2來講,Python解釋器在讀取到中文字符的字節碼嘗試解碼操作時,會先查看當前代碼文件頭部是否有指明當前代碼文件中保存的字節碼對應的字符編碼是什么。如果沒有指定則使用默認字符編碼"ASCII"進行解碼導致解碼失敗,導致如下錯誤:

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

對于Python3來講,執行過程是一樣的,只是Python3的解釋器以"UTF-8"作為默認編碼,但是這并不表示可以完全兼容中文問題。比如我們在Windows上進行開發時,Python工程及代碼文件都使用的是默認的GBK編碼,也就是說Python代碼文件是被轉換成GBK格式的字節碼保存到磁盤中的。Python3的解釋器執行該代碼文件時,試圖用UTF-8進行解碼操作時,同樣會解碼失敗,導致如下錯誤:

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. 最佳實踐

  • 創建一個工程之后先確認該工程的字符編碼是否已經設置為UTF-8
  • 為了兼容Python2和Python3,在代碼頭部聲明字符編碼:-*- coding:utf-8 -*-
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編碼
    +關注

    關注

    6

    文章

    935

    瀏覽量

    54762
  • python
    +關注

    關注

    56

    文章

    4782

    瀏覽量

    84453
收藏 人收藏

    評論

    相關推薦

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

    `Python中出現亂碼,英文顯示沒問題,一般是中文輸出出現了編碼問題,如果python文件沒有指定編碼,在執行過程中就會出現報錯!
    發表于 12-27 15:13

    python默認的解釋器并不支持tab補全

    雖然python在linux系統默認安裝的,但是python默認的解釋器并不支持tab補全,所以推薦使用ipython。
    發表于 07-11 07:22

    從5個方面來解析計算機的字符編碼概念

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

    從RHEL 8 Beta開始不再默認系統Python版本

    為了改善用戶體驗,從 RHEL 8 Beta 開始不再強調“系統 Python”,不再默認一個 Python 版本。
    的頭像 發表于 12-30 14:23 ?1896次閱讀

    Python編碼規范是怎么樣的

    建議使用Emacs 的Python-mode 默認值: 4 個空格一個縮進層次。對于確實古老的代碼,若不希望產生混亂,可以繼續使用8 空格的制表符。在Emacs 的Python-mode 中會自動
    發表于 08-12 16:03 ?3次下載
    <b class='flag-5'>Python</b>的<b class='flag-5'>編碼</b>規范是怎么樣的

    科普:Python函數默認返回 None 的原因

    Python 有一項默認的做法,很多編程語言都沒有——它的所有函數都會有一個返回值,不管你有沒有寫 return 語句。
    的頭像 發表于 08-17 11:39 ?2342次閱讀

    Python 函數默認返回None的原因

    Python 函數默認返回None是什么原因?定義的函數沒有返回值,Python 解釋器就會強行地默認給注入一段返回邏輯!實際上 Python
    的頭像 發表于 08-21 10:51 ?2610次閱讀
    <b class='flag-5'>Python</b> 函數<b class='flag-5'>默認</b>返回None的原因

    Python中最基本的10個內容

    時會遇上亂碼問題,其原因是字符集的編碼問題。Linux和Mac默認編碼集是UTF8,而Windows則是
    發表于 12-11 11:54 ?1671次閱讀

    如何在Ubuntu安裝IDLE Python IDE

    當初學Python時,設置編碼環境可能會很具有挑戰性。IDLE(集成開發和學習環境)是一個Python IDE,可簡化相同的過程。安裝后,您可以立即開始編碼
    的頭像 發表于 04-10 10:29 ?728次閱讀

    Python編碼與解碼

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

    Python2與Python3對字符串的支持

    其實Python3對字符串支持的改進,不僅僅是更改了默認編碼,而是重新進行了字符串的實現,而且它已經實現了對UNICODE的內置支持,從這方面來講
    的頭像 發表于 07-05 16:15 ?706次閱讀

    Python字符編碼轉換

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

    mysql數據庫默認字符編碼是什么

    MySQL數據庫的默認字符編碼是utf8mb4。下面我將詳細介紹MySQL數據庫的字符編碼相關知識,并展開討論相應的配置、應用和注意事項。 一、MySQL數據庫字符編碼簡介 什么是字符
    的頭像 發表于 11-16 14:50 ?1539次閱讀

    python如何保存文件

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

    查看python安裝路徑的方法

    。 方法一:使用Python自帶安裝程序的默認路徑 Python的安裝程序通常會將Python解釋器安裝在默認的路徑
    的頭像 發表于 11-29 14:54 ?1.1w次閱讀