中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python解析器的解析過程是怎樣的

發布時間:2021-10-27 19:09:25 來源:億速云 閱讀:187 作者:柒染 欄目:編程語言

今天就跟大家聊聊有關Python解析器的解析過程是怎樣的,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

首先先讓大家看一下Python解析器的全流程:我們先用編輯器編寫好源代碼,保存成文件。如果源代碼中有編碼聲明而且用的編輯器支持該語法,那么該文件就以相應的編碼方式保存在磁盤中。

注意: 編碼聲明和源文件的編碼不一定是一致的,你完全可以在編碼聲明中聲明編碼為UTF-8,但是用GB2312來保存源文件。當然,我們不可能自尋煩惱,故意寫錯,而且好的IDE也能強制保證兩者的一致性,但是,如果我們用記事本或者EditPlus等編輯器來編寫代碼的話,一不小心就會出現這種問題的。

得到一個.py文件后,我們就可以運行它了,這是,我們就把代碼交給Python解析器來完成解析工作。解析器讀入文件時,先解析文件中的編碼聲明,我們假設文件的編碼為gb2312,那么先將文件中的內容由gb2312轉換成Unicode,然后再把這些Unicode轉換為UTF-8格式的字節串。

(注:這里僅指源代碼即腳本代碼的純代碼轉換) 完成這一步驟后,解析器把這些UTF-8字節串分段,解析。如果遇到使用Unicode字符串(注:比如遇到 u'中國a我愛你') ,那么就使用相應的UTF-8字節串創建Unicode字符串。

如果程序中使用的是一般的字符串,那么解析器先將UTF-8字節串通過Unicode轉換成相應編碼(這里就是gb2312編碼)的字節串(注:普通的,非unicode的,即ascii ),并用其創建一般的字符串對象。也就是說,Unicode字符串跟一般字符串在內存中的存放格式是不一樣的,前者使用UTF-8的格式,后者使用GB2312格式。

好了,內存中的字符串存放格式我們知道了,下面我們要了解print的工作方式。print其實只是負責把內存中相應的字節串交給操作系統,讓操作系統相應的程序(譬如cmd窗口)進行顯示。這里有兩種情況:

1、若字符串是一般的字符串,那么print只需把內存中相應的字節串推送給操作系統。如例子中的code 1。
2、如果字符串是Unicode字符串,那么print在推送之前先進行相應的encode:我們可以顯示使用Unicode的encode方法使用合適的編碼方式來編碼(例子中code 2)

否則Python使用默認的編碼方式進行編碼,也就是ASCII(例子中的code 3)。當然ASCII是不可能正確編碼中文的,因此Python報錯。至此,上面的三個問題我們已經可以解析***和第三個了。至于第二個問題,因為Python中有兩種字符串,一般字符串和Unicode字符串,兩者都有各自的字符處理方法。

對于前者,方法是以字節的方式進行的,而且在GB2312中,每個漢字占用兩個字節,因此得到的結果是5;對于后者,也就是 Unicode字符串,所有字符都是統一看待的,因此得到。

雖然上面只提到了控制臺程序的中文問題,但是文件讀寫以及網絡傳輸中出現的中文問題在原理上都是類似的。Unicode的出現可以很大程度上解決軟件的國際化問題,同時Python為Unicode提供了極為良好的支持,因此,我建議大家在編寫Python的程序時,都統一使用Unicode方式。

保存文件時使用UTF-8的編碼方式。How to Use UTF-8 with Python有詳細的描述,大家可以參考一下。Python中能導致出現中文問題的地方還很多,譬如文件的讀寫,網絡數據的傳輸等,希望大家能多多交流,共同解決這些問題。

回顧一下使用Python解析器的流程:首先,先用編輯器編寫好源代碼,保存成文件。如果源代碼中有編碼聲明而且用的編輯器支持該語法,那么該文件就以相應的編碼方式保存在磁盤中。注意:編碼聲明和源文件的編碼不一定是一致的,完全可以在編碼聲明中聲明編碼為UTF-8,但是用GB2312來保存源文件。

當然,這是自尋煩惱,而且好的IDE也應該保證兩者的一致性。但是,如果。用記事本或者EditPlus等編輯器來編寫代碼的話,可能就會出現這種問題的。得到一個.py文件后,可以運行它。這是把代碼交給Python解析器來完成解析工作。解析器讀入文件時,先解析文件中的編碼聲明,假設文件的編碼為gb2312。

那么先將文件中的內容由gb2312轉換成Unicode,然后再把這些Unicode轉換為UTF-8格式的字節串。完成這一步驟后,解析器把這些UTF-8字節串分段,解析。如果遇到使用Unicode字符串,那么就使用相應的UTF-8字節串創建Unicode字符串,如果程序中使用的是一般的字符串。

那么解析器先將UTF-8字節串通過Unicode轉換成相應編碼(這里就是gb2312編碼)的字節串,并用其創建一般的字符串對象。也就是說,Unicode字符串跟一般字符串在內存中的存放格式是不一樣的,前者使用UTF-8的格式,后者使用GB2312格式。

看完上述內容,你們對Python解析器的解析過程是怎樣的有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

福州市| 昌图县| 扬州市| 横峰县| 舒城县| 周至县| 县级市| 淅川县| 张掖市| 五莲县| 宁陕县| 洮南市| 娄底市| 喜德县| 旬邑县| 大厂| 定州市| 灯塔市| 庐江县| 南川市| 阿图什市| 玉田县| 临潭县| 武邑县| 赞皇县| 墨脱县| 理塘县| 长丰县| 河北省| 保靖县| 辽阳市| 伊川县| 英超| 自治县| 邳州市| 伊宁县| 美姑县| 汽车| 宁津县| 库尔勒市| 资兴市|