日韩性视频-久久久蜜桃-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ò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 欧美黑吊大战白妞 | 国产亚洲精品久久久久久无几年桃 | 天天操狠狠干 | 国产自精品 | 欧美日韩激情在线一区二区三区 | 亚洲无人区码一码二码三码的含义 | 亚洲精品久久夜色撩人男男小说 | 成人看片黄a免费看视频 | 国产伦精品一区二区三区照片 | av操操操 | 亚洲国产成人一区 | 久久久视频在线观看 | 精品综合 | 巨乳免费观看 | 无码人妻丰满熟妇啪啪网站 | 成年精品 | 老湿影院av | 国产成人精品777777 | 午夜久 | 久久久九九| 女性裸体不遮胸图片 | 久草一区二区 | 五月婷婷操 | 欧美黄色三级 | 欧美日韩在线一区二区三区 | 亚洲精品免费在线观看 | 看一级大片 | 成人免费在线看片 | 天堂在线中文字幕 | 日韩激情在线视频 | 午夜精品久久久久久久爽 | 青青草91 | 色综合狠狠爱 | 自拍1区 | 中文av字幕 | 先锋影音资源av | 91老司机在线| 69xxx国产| 日韩一卡二卡在线 | av在线www| 少妇在线 | 香蕉av一区二区三区 | а中文在线天堂 | 日韩欧美性视频 | 欧美成人乱码一二三四区免费 | 在线观看黄色大片 | 国产二区视频在线观看 | 青青草久久爱 | 黄色免费网站在线 | 黄色小说视频 | 青青草原国产 | 俄罗斯一级片 | 中文字幕第315页 | re久久| 97精品人人a片免费看 | 欧美黑人又粗又大的性格特点 | 免费污视频在线观看 | 国产黄色一区二区 | ass东方小嫩模pics | 天天干夜夜 | 天天5g天天爽免费观看 | 高清av网 | 国产日本精品视频 | 国产精品99久久久久久人 | 午夜视 | 3d动漫啪啪精品一区二区中文字幕 | 在线中文字幕av | 天堂综合网 | 国产视频自拍一区 | 自拍偷拍亚洲精品 | www.色视频 | 天天操天天爽天天射 | 久久99久久98精品免观看软件 | 明星毛片| 美女精品久久 | 给我看免费高清在线观看 | 欧美日韩精品一区二区三区 | 欧美性猛交99久久久久99按摩 | 国产av国片偷人妻麻豆 | 女生扒开尿口 | 久久青 | 精品看片 | 女人被狂躁60分钟视频 | 超碰超在线 | 天堂在线精品视频 | 我和我的太阳泰剧在线观看泰剧 | 日日夜夜免费视频 | 包射屋 | 精品在线小视频 | 四十路av| 精品人妻伦九区久久aaa片 | 91操人视频 | 国产ts人妖系列高潮 | 国产最新视频 | 好屌妞视频这里只有精品 | 黄色片99| 男女在楼梯上高潮做啪啪 | 六月天综合网 | 先锋影视av |