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

歡迎訪問 生活随笔!

生活随笔

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

python

【转】关于Python脚本开头两行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定文件编码类型...

發(fā)布時(shí)間:2023/12/1 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】关于Python脚本开头两行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定文件编码类型... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文網(wǎng)址:http://www.crifan.com/python_head_meaning_for_usr_bin_python_coding_utf-8/

#!/usr/bin/python

是用來說明腳本語言是python的

是要用/usr/bin下面的程序(工具)python,這個(gè)解釋器,來解釋python腳本,來運(yùn)行python腳本的。

?

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

是用來指定文件編碼為utf-8的

詳情可以參考:

PEP 0263 — Defining Python Source Code Encodings

?

在此,詳細(xì)的(主要是翻譯)解釋一下,為何要加這個(gè)編碼聲明,以及如何添加編碼聲明:

?

使用文件編碼聲明以前所遇到的問題

Python 2.1中,想要輸入U(xiǎn)nicode字符,只能用基于Latin-1的"unicode-escape"的方式輸入 -> 對于其他非Latin-1的國家和用戶,想要輸入U(xiǎn)nicode字符,就顯得很繁瑣,不方便。

希望是:

編程人員,根據(jù)自己的喜好和需要,以任意編碼方式輸入字符串,都可以,這樣才正常。

?

建議選用的方案

所以,才有人給Python官方建議,所以才有此PEP 0263。

此建議就是:

允許在Python文件中,通過文件開始處的,放在注釋中的,字符串形式的,聲明,聲明自己的python文件,用何種編碼。

由此,需要很多地方做相應(yīng)的改動(dòng),尤其是Python文件的解析器,可以識別此種文件編碼聲明。

?

具體如何聲明python文件編碼?

上面已經(jīng)說了,是,文件開始處的,放在注釋中的,字符串形式的,聲明。

那具體如何聲明,以什么樣的格式去聲明呢?

其實(shí)就是,你之前就見過的,這種:

?
1 # -*- coding: utf-8 -*-

對此格式的詳細(xì)解釋是:

  • 如果沒有此文件編碼類型的聲明,則python默認(rèn)以ASCII編碼去處理
    • 如果你沒聲明編碼,但是文件中又包含非ASCII編碼的字符的話,python解析器去解析的python文件,自然就會(huì)報(bào)錯(cuò)了。
    必須放在python文件的第一行或第二行 支持的格式,可以有三種:
  • 帶等于號的: ?
    1 # coding=<encoding name>
  • 最常見的,帶冒號的(大多數(shù)編輯器都可以正確識別的): ?
    1 2 #!/usr/bin/python # -*- coding: <encoding name> -*-
  • vim的: ?
    1 2 #!/usr/bin/python # vim: set fileencoding=<encoding name> :
  • 更加精確的解釋是:
    • 符合正則表達(dá)式: ?
      1 "coding[:=]\s*([-\w.]+)"
    • 的都可以,很明顯,如果你熟悉正則表達(dá)式,也就可以寫出來,其他一些合法的編碼聲明,以utf-8為例,比如:
    ?
    1 2 3 4 5 coding:???????? utf-8 coding=utf-8 coding=??????????????????utf-8 encoding:utf-8 crifanEncoding=utf-8
  • 為了照顧特殊的Windows中的帶BOM(’\xef\xbb\xbf’)的UTF-8:
  • 如果你的python文件本身編碼是帶BOM的UTF-8,即文件前三個(gè)字節(jié)是:’\xef\xbb\xbf’,那么:
  • 即使你沒有聲明文件編碼,也自動(dòng)當(dāng)做是UTF-8的編碼
  • 如果你聲明了文件編碼,則必須是聲明了(和你文件編碼本身相一致的)UTF-8
  • 否則(由于聲明的編碼和實(shí)際編碼不一致,自然)會(huì)報(bào)錯(cuò)
  • ?

    文件編碼聲明的各種例子

    針對上面的規(guī)則,下面給出各種,合法的,非法的,例子,供參考:

    合法的python文件編碼聲明

  • 帶聲明了解釋器的,Emacs風(fēng)格的,(注釋中的)文件編碼聲明
  • 例子1: ?
    1 2 3 4 #!/usr/bin/python # -*- coding: latin-1 -*- import?os, sys ...
  • 例子2: ?
    1 2 3 4 #!/usr/bin/python # -*- coding: iso-8859-15 -*- import?os, sys ...
  • 例子3: ?
    1 2 3 4 #!/usr/bin/python # -*- coding: ascii -*- import?os, sys ...
  • 不帶聲明了解釋器的,直接用純文本形式的: ?
    1 2 3 # This Python file uses the following encoding: utf-8 import?os, sys ...
  • 文本編輯器也可以有多種(其他的)定義編碼的方式: ?
    1 2 3 4 #!/usr/local/bin/python # coding: latin-1 import?os, sys ...
    • 很明顯,其中的沒用-*-,直接用了coding加上編碼值
    不帶編碼聲明的,默認(rèn)當(dāng)做ASCII處理: ?
    1 2 3 #!/usr/local/bin/python import?os, sys ...

    非法的python文件編碼聲明舉例

  • 少了coding:前綴 ?
    1 2 3 4 #!/usr/local/bin/python # latin-1 import?os, sys ...
  • 編碼聲明不在第一行或第二行: ?
    1 2 3 4 5 #!/usr/local/bin/python # # -*- coding: latin-1 -*- import?os, sys ...
  • 不支持的,非法的字符編碼(字符串)聲明: ?
    1 2 3 4 #!/usr/local/bin/python # -*- coding: utf-42 -*- import?os, sys ...
  • ?

    python文件編碼聲明所遵循的理念

    1.單個(gè)的完整的python源碼文件中,只用單一的編碼。

    ->

    不允許嵌入了多種的編碼的數(shù)據(jù)

    否則會(huì)導(dǎo)致(python解釋器去解析你的python文件時(shí))報(bào)編碼錯(cuò)誤。

    ?

    不太懂這段:

    Any encoding which allows processing the first two lines in the way indicated above is allowed as source code encoding, this includes ASCII compatible encodings as well as certain multi-byte encodings such as Shift_JIS. It does not include encodings which use two or more bytes for all characters like e.g. UTF-16. The reason for this is to keep the encoding detection algorithm in the tokenizer simple.

    ?

    2.這段也不太懂:

    Handling of escape sequences should continue to work as it does now, but with all possible source code encodings, that is standard string literals (both 8-bit and Unicode) are subject to escape sequence expansion while raw string literals only expand a very small subset of escape sequences.

    ?

    3.Python的分詞器+編譯器,會(huì)按照如下的邏輯去工作:

  • 讀取文件
  • 不同的文件,根據(jù)其聲明的編碼去解析為Unicode
  • 轉(zhuǎn)換為UTF-8字符串
  • 針對UTF-8字符串,去分詞
  • 編譯之,創(chuàng)建Unicode對象
  • 要注意的是:

    Python中的標(biāo)識符,都是ASCII的。

    ?

    其余的內(nèi)容,不翻譯了。

    至此,已經(jīng)解釋的夠清楚了。

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/wi100sh/p/4238933.html

    總結(jié)

    以上是生活随笔為你收集整理的【转】关于Python脚本开头两行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定文件编码类型...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 一级片在线 | 国内精品在线观看视频 | 成人在线视频免费看 | 色婷婷av一区二区 | 国产精品毛片va一区二区三区 | 青青操精品 | 日韩av一区二区三区 | 日本精品在线观看 | 成人精品在线播放 | 美女张开腿流出白浆 | 黄色大片一级 | 免费av导航 | 免费一级片在线观看 | 少妇人妻偷人精品无码视频新浪 | 日日碰日日摸 | 人妻一区二区在线 | 免费a级大片 | av中文网站 | 黄色av毛片 | 日韩av影音先锋 | 91原视频 | 女儿的朋友在线播放 | 国产精品国产精品 | 美国一区二区三区 | 久久免费视频一区二区 | 成年人看的黄色片 | 性色av一区二区三区四区 | 欧美色图在线视频 | 国产字幕av | 亚洲一区中文 | 国产精品ⅴa有声小说 | 熟妇人妻中文av无码 | 春物催眠| 成人免费视频国产免费网站 | 成片免费观看视频大全 | 午夜精品久久久久久久四虎美女版 | 亲吻刺激视频 | 性色在线观看 | 三级黄色av| 欧美日韩在线视频一区二区 | 韩国av不卡 | 欧美毛片在线观看 | 青青草原伊人网 | 亚洲free性xxxx护士hd | 日本一区免费 | 久青草影院 | 天堂综合网久久 | 波多野结衣中文字幕一区二区 | 欧美极品少妇xxxxⅹ猛交 | 午夜高清视频 | 香港三日本三级少妇66 | 青青草娱乐在线 | 欧美成人一区二区三区片免费 | 在线97| 亚洲男人天堂2018 | 久久久婷 | 梦梦电影免费高清在线观看 | 少妇被黑人到高潮喷出白浆 | 桃色视频网 | 久久99国产精品 | 国产调教在线观看 | 免费的黄色一级片 | 一区精品在线观看 | 国产5区| 非洲黄色大片 | 国产麻豆精品在线 | 日本韩国在线 | 亚洲第一狼人区 | wwwxxx亚洲 | 91精品国产高清 | 青娱乐最新视频 | 在线观看免费人成视频 | 天天色天天操天天 | 岛国一区 | 久久久午夜 | 夜夜爱爱 | 国产精品成熟老女人 | 久久av色 | 美女脱了裤子让男人捅 | 国产精品自拍偷拍视频 | 久久伊人亚洲 | 玖玖zyz | 蜜臀久久99精品久久久画质超高清 | 久久艳片www.17c.com | 无遮挡裸光屁屁打屁股男男 | 日韩一区二区精品视频 | 日韩欧美国产一区二区三区 | 成人在线视频在线观看 | av网站国产 | 亚洲高清毛片一区二区 | 美女野外找人搭讪啪啪 | 噼里啪啦国语高清 | 可以免费观看的av | 国产精品婷婷午夜在线观看 | 日韩123区 | 精品久久久久中文慕人妻 | 性xxx法国hd极品| 三年在线观看视频 | 粗大的内捧猛烈进出在线视频 |