日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python以什么表示代码层次_python 中几个层次的中文编码.md

發(fā)布時間:2025/3/15 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python以什么表示代码层次_python 中几个层次的中文编码.md 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

介紹

一直不太喜歡使用命令行,所以去年年底的技術(shù)創(chuàng)新中,使用TkInter來開發(fā)小工具。結(jié)果花費(fèi)了大量的時間來學(xué)習(xí)TkInter ui的使用。

最近想整理該工具,使用命令行的形式,然后將該工具做成exe的形式進(jìn)行分發(fā)。在工作一開始就遇到了編碼的問題。

在腳本中有如下代碼,用來接收用戶交互式輸入的ip。

server = raw_input("請輸GIS Server IP:")

在腳本文件的第一行,我已經(jīng)加了如下代碼

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

但是在windows 的控制臺執(zhí)行的時候,出現(xiàn)了亂碼。有點(diǎn)不解,因?yàn)樽约阂恢币詠碓趐ython中,處理中文都是在文件頭加入該代碼。

通過搜索發(fā)現(xiàn),是因?yàn)樵趙indows cmd 默認(rèn)的使用的cp936的編碼。既然知道使用這種編碼則將編碼改為如下:

# -*-coding: cp936-*-

但是得到如下的錯誤:

SyntaxError: encoding problem: cp936 with BOM

百思不得其解。作為懶癌患者,就想繞過去。則采用如下方式,對單獨(dú)字符串進(jìn)行編碼。

userName=raw_input("請輸入站點(diǎn)管理員用戶名:".decode("utf-8").encode("cp936"))

這樣重要在cmd中可以正常的輸出中文了。但是問題來了,我的腳本中,有上百行代碼有中文。每個地方都這么寫,感覺偷懶不成,反被*。

這個時候,通過搜索。逐步的發(fā)現(xiàn)了問題的原因。這是因?yàn)閜ython有幾個層次的編碼。分別是:

字符串變量級別編碼

腳本級別的編碼

py文件級別的編碼

顯示窗口的編碼

字符串變量的編碼

對單個字符串轉(zhuǎn)碼,可以使用:encode()編碼成可以顯示的。通常對字符串不能由一個編碼直接轉(zhuǎn)換為另一個編碼。通常需要解碼到Unicode,然后對unicode字符串重新的編碼。比如上面的示例。

腳本的編碼

上面通過設(shè)置 #coding:utf-8設(shè)置的就是腳本里面內(nèi)容的編碼。也就是該腳本文件中所有的字符串變量都采用該處設(shè)置的編碼方式。

py文件的編碼

py文件的編碼,默認(rèn)的是ANSI。但是也可以使用utf-8,unicode編碼。

顯示窗口的編碼

上面的幾種情況,中文在運(yùn)行階段不會出錯。但是這些中文還不一定能夠正常的顯示。能否正常的顯示,還有顯示窗口支持的編碼決定。比如cmd中中文支持GBK和cp936,所以代碼中的字符串需要編碼到這兩種才可以顯示。

測試

當(dāng)py文件的編碼為utf-8的時候。代碼中唔需要添加#coding:utf-8 。腳本中的中文,在運(yùn)行過程不會報錯。

當(dāng)py文件的編碼為ANSI的時候。如代碼中沒有顯示的添加 ** --coding:utf-8 -- **,則當(dāng)代碼中出現(xiàn)中文的時候,運(yùn)行腳本的時候。會出現(xiàn)如下錯誤

SyntaxError: Non-ASCII character '\xe4' in file

當(dāng)py文件設(shè)置為utf-8,而顯示設(shè)置代碼編碼為#coding:936。則會出現(xiàn)ncoding problem: cp936 with BOM的錯。這個時候,將py文件的編碼改為ANSI即可。

結(jié)論

通過上面的測試,有幾個結(jié)論:

編碼有層次結(jié)構(gòu)。文件編碼影響腳本內(nèi)容編碼,腳本內(nèi)容編碼決定 其中的字符串編碼。

當(dāng)字符串顯示設(shè)置了編碼的時候。字符串的編碼為顯示設(shè)置的編碼,此時文件和腳本編碼不起作用。當(dāng)字符串沒有顯示設(shè)置編碼的時候,則采用上一級編碼決定。

所以設(shè)置這三種編碼的時候,需要確保三種編碼之間能夠轉(zhuǎn)換。否則會出現(xiàn)上面列舉的錯誤。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的python以什么表示代码层次_python 中几个层次的中文编码.md的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。