zoukankan      html  css  js  c++  java
  • 20200917-Python学习笔记3

    编码

    ASCII编码一个字节

    Unicode编码通常两个字节

    字母A用ASCII编码是十进制的65,二进制的01000001

    字符0用ASCII编码是十进制的48,二进制的00110000,注意字符'0'和整数0是不同的

    汉字中已经超出了ASCII编码的范围,用Unicode编码是十进制的20013,二进制的01001110 00101101

    UTF-8编码是针对Unicode的一种可变长度字符编码。它可以用来表示Unicode标准中的任何字符,而且其编码中的第一个字节仍与ASCII相容,使得原来处理ASCII字符的软件无须或只进行少部份修改后,便可继续使用。

    ord()函数获取字符的整数表示

    chr()函数把编码转换为对应的字符

    >>> ord('u')
    117
    >>> ord('U')
    85
    >>> ord('we')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: ord() expected a character, but string of length 2 found
    >>> chr(89)
    'Y'
    >>> chr(85)
    'U'
    >>>

    Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes

    Python对bytes类型的数据用带b前缀的单引号或双引号表示

    'ABC'和b'ABC',前者是str,后者虽然内容显示得和前者一样,但bytes的每个字符都只占用一个字节

    以Unicode表示的str通过encode()方法可以编码为指定的bytes

    例子:

    >>> 'we'.encode('ascii')
    b'we'
    >>> b'we'
    b'we'
    >>> '汉字'.encode('utf-8')
    b'xe6xb1x89xe5xadx97'
    >>> 'we'.encode('utf-8')
    b'we'
    >>> '汉字'.encode('ascii')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
    >>>

    在bytes中,无法显示为ASCII字符的字节,用 x## 显示。反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。

    把bytes变成str,要用到decode()方法

    >>> b'ASD'
    b'ASD'
    >>> b'ASD'.decode('ascii')
    'ASD'
    >>> b'xe4xb8xadxe6x96x87'.decode('utf-8')
    '中文'
    

    如果bytes中包含无法解码的字节,decode() 方法会报错,如果字节只有一小部分,可以传入errors='ignore' 忽略错误的字节

    >>> b'xe4xb8xadxff'.decode('utf-8',errors='ignore')
    '中'
    >>> b'xe4xb8xadxff'.decode('utf-8')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 3: invalid start byte
    >>>
    

    len()函数可以计算str包含多少个字符

    >>> len('BIG')
    3
    >>> len('今晚打老虎')
    5
    >>>
    

    len()函数:返回项目(字符、字节、列表)的长度或个数

    len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数。

    >>> len('iop')
    3
    >>> len('aaa')
    3
    >>> len(b'xe4xb8xadxe6x96x87')
    6
    >>> len('中文'.encode('utf-8'))
    6
    >>>
    

    当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:

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

    第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;

    第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

  • 相关阅读:
    sql初始化XML操作
    c#字符串操作方法实例
    C#日期格式转换
    asp.net中打印指定控件内容
    NET中验证控件表达式汇总
    js中页面刷新和页面跳转的方法总结
    数据库备份与还原SQL代码
    NIO 基础之 Buffer
    Java堆外内存之突破JVM枷锁
    JAVA NIO:Buffer.mark()的用法
  • 原文地址:https://www.cnblogs.com/lookmefly/p/13686317.html
Copyright © 2011-2022 走看看