目录[-]


在计算机系统中,所有文件的存储都是以二进制的方式进行的,但是根据在编码层次上的差异,可以分为文本文件和二进制文件。
文本文件是一种典型的顺序文件,其逻辑结构属于流式文件,编码规则一般采用定长编码的ASCII编码,为了提升效率以及更广泛的应用,也可采用UNICODE编码。
二进制文件是基于值编码的文件,需要进行变长自定义编码。


1、ASCII码

计算机中有256个ASCII码字符,每个字符占用1个字节的空间。现在常用的有127个字符,其基础ASCII码如下所示。UFTF-8编码:
在计算机系统中,采用ASCII码编码,对英文来说已经足够,但对其他语言来说还是不够的,比如现在所有的中文字符大概有6万个左右,所以为例涵盖更多的文字,计算机使用1-6个字节来表示一个UTF-8字符,每个字符代表一个文字。
大多数汉字会采用3个字节来进行表示。
UTF-8是UNICODE编码的一种编码格式。


2、Python编码格式

在Python2.0中默认采用ASCII码编码,Python3.0中默认使用UTF-8编码。为了使得Python2.0支持UTF-8编码,需要进行特殊声明。

# *-* coding:utf8 *-* 

在 Python 2.x 中,即使指定了文件使用 UTF-8 的编码格式,但是在遍历字符串时,仍然会 以字节为单位遍历 字符串
要能够 正确的遍历字符串,在定义字符串时,需要 在字符串的引号前,增加一个小写字母 u,告诉解释器这是一个 unicode 字符串(使用 UTF-8 编码格式的字符串)

# *-* coding:utf8 *-*
# 在字符串前,增加一个 `u` 表示这个字符串是一个 utf8 字符串
hello_str = u"你好世界"
print(hello_str)
for c in hello_str:
    print(c)

那么说回你想要的结果,你要的是最大4字节的标准化UTF-8的可表示字符数。我们先搞清楚它怎么表示。
下表总结了编码规则,字母x表示可用编码的位。

    Unicode符号范围 | UTF-8编码方式
    (十六进制) | (二进制)
    --------------------+---------------------------------------------
    0000 0000-0000 007F | 0xxxxxxx
    0000 0080-0000 07FF | 110xxxxx 10xxxxxx
    0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
    0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

跟据上表,解读UTF-8编码非常简单。如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。后面跟的开头都是10。

那么自己数一下X的数量就知道,结果是2^6+2^11+2^16+2^21=2164864。
也就是说,标准化的UTF-8能表示200多万种字符。

“修正的UTF-8”,理论上也能有6字节。


3、Python 操作文件

打开文件,读写文件,关闭文件

# 打开文件函数
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
# file:必须指定文件的名字或地址
mode:
file_name = open("文件路径及名称", “”)
# 读操作
file_name.read()
# 写操作
file_name.write()    
# 关闭文件
file_name.close()