• 为什么要在python文件头声明编码方式?


    在写python时,有时会在文件头声明编码方式,如下:

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

    有时又没有,似乎写不写都没关系。但实际上这样的想法是不行的,即便你没有上面的声明,Python将默认为ASCII标准编码,对python解释器来说两者相同,但对编辑器来说,就可能出现识别不了的问题。
    官方文档PEP 263是这么描述的:

    在Python 2.1中,只能使用基于Latin-1的编码“ unicode-escape”编写Unicode文字。
    这使得编程环境对在许多亚洲国家/地区的非Latin-1语言环境中生活和工作的Python用户而言非常不利。
    程序员可以使用最喜欢的编码来编写其8位字符串,但是绑定到Unicode文字的“ unicode-escape”编码

    换句话说,默认的ASCII标准编码(规定了128个字符的编码),对于英文字母是足够的,但是对于非英语国家编码就显得复杂了起来(具体也可以搜索字符编码相关知识)。比如法语德语中还有注音,它们可以ASCII(总共256)中闲置的字符,但是对于更复杂的中文则还有专门的比如GB2312方式。

    这样就针对每种语言都有各种各样的编码方式,有没有一种统一的能够囊括所有符号的编码方式呢?有,那就是Unicode。
    Unicode 是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字严。具体的符号对应表,可以查询unicode.org,或者专门的汉字对应表。

    注意Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。于是UTF-8应运而生,成为在互联网上使用最广的一种 Unicode 的实现方式。其他实现方式还包括 UTF-16(字符用两个字节或四个字节表示)和 UTF-32(字符用四个字节表示。
    前面PEP263已经表明python支持utf-8方式,实现方式见本文开头,python官方则建议声明编码方式的同时声明解释器路径,
    如下:

    #!/usr/local/bin/python3
    # -*- coding: utf-8 -*-
    

    而一般简化的声明可以写成:

    #coding=utf-8
    

    或者

    #coding:utf-8
    

    只需要匹配以下正则表达式即可:

    ^[ 	f]*#.*?coding[:=][ 	]*([-_.a-zA-Z0-9]+)
    

    参考文档

    python中头文件的声明
    字符编码笔记:ASCII,Unicode 和 UTF-8

  • 相关阅读:
    《构建之法》第四章的感悟
    单复利软件单元测试
    实验一 操作系统模仿cmd
    <构建之法>第一二三章感悟
    近期工作量统计
    复利计算3.0
    复利运算
    单利运算1
    复利计算6.0
    汉堡包
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13281670.html
Copyright © 2020-2023  润新知