关于Python的编码注释# -*- coding:utf-8 -*- 详解
一.普通解釋:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 如果要在python2的py文件里面寫中文,則必須要添加一行聲明文件編碼的注釋,否則python2會默認使用ASCII編碼。
二.官方解釋:
1. python2.1中遇到的問題:
Python 2.1 中,想要輸入 Unicode 字符,只能用基于 Latin-1 的 "unicode-escape" 的方式輸入 -> 對于其他非 Latin-1 的國家和用戶,想要輸入 Unicode 字符,就顯得很繁瑣,不方便。
希望是:編程人員,根據自己的喜好和需要,以任意編碼方式輸入字符串,都可以,這樣才正常。
2. 建議選用的方案
所以,才有人給 Python 官方建議,所以才有此PEP 0263。
此建議就是:
允許在 Python 文件中,通過文件開始處的,放在注釋中的,字符串形式的,聲明,聲明自己的 python 文件,用何種編碼。
由此,需要很多地方做相應的改動,尤其是 Python 文件的解析器,可以識別此種文件編碼聲明。
3 具體如何聲明python文件編碼?
(1)如果沒有此文件編碼類型的聲明,則 python 默認以ASCII編碼去處理;如果你沒聲明編碼,但是文件中又包含非ASCII編碼的字符的話,python解析器去解析的 python 文件,自然就會報錯了。
(2)必須放在python文件的第一行或第二行;
(3)支持的格式,可以有三種:
# vim: set fileencoding=<encoding name> :
(4)更加精確的解釋是:
? ? 符合正則表達式:"^[ \t\v]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+)" 就可以;
關于正則表達式的理解:
1."^"表示開始;
2."[ \t\v]"表示匹配制表符\t和垂直制表符\v,*表示匹配0次或者多次,則[ \t\v]*合起來理解就是匹配0次或者多次\t\v;
3."#"匹配#字符,即對應標題的#字符;
4.".*"表示接下來匹配任意字符,".*?"表示以非貪心算法匹配任意字符,對應標題中的“?-*-?”;
5."coding"對應標題中的coding;
6."[:=]"表示接下來的字符是":"或者"="出現的任意多個字符,對應標題中的":";
7.[ \t]*表示接下來匹配0次或者多次\t;標題中表示使用了0次;
8.[-_.a-zA-Z0-9]表示匹配出現'_'字符、小寫字母'a至z'、大小字母'A至Z'、數字‘0至9’的任意多的字符,對應標題中的utf-8
9.接下來標題中的"?-*-?"則這個官方表達式沒有給出解釋,因此這個正則表達式應該是不完整的,我覺得完整的正則表達式可以為:
"^[ \t\v]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+).*$"
總結
以上是生活随笔為你收集整理的关于Python的编码注释# -*- coding:utf-8 -*- 详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: #!/usr/bin/env pytho
- 下一篇: FreeRTOS学习笔记之信号量