• python字符串的编码问题


    https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431664106267f12e9bef7ee14cf6a8776a479bdec9b9000

    由以上内容的思考:

    python中字符串的默认编码是Unicode编码,但是在实际运用中市场需要Unicode和UTF-8(包含了ASCII)之间的转换。

    ASCII编码:一个字符由1个byte(8位二进制/8bits)表示;

    Unicode编码:一个字符由2个byte表示;

    UTF-8编码:一个字符由1个或者多个byte表示,“可变长编码”,向下覆盖了ASCII编码。

    编码格式就是一张带角标的字符表,区别是角标的表示位数。

    如果知道字符的整数编码(默认都是Unicode编码),还可以用十六进制这么写str

    #u表示Unicode编码,4e2d和6587位16进制数,2位表示一个byte,Unicode有4位表示2个字节
    >>> 'u4e2du6587'
    '中文'

    但是要传输和存储动作时,需要将Unicode码转化为字节码bytes数据类型,这一数据类型就是按照ASCII和UTF-8编码的,在纯英文和数字及普通字符时就是ASCII编码格式。

    其实保存到磁盘时所以一般都选UTF-8编码格式,是指在保存和读取时使用该格式编码和解码,我们写的python代码直接使用Unicode(编辑的时候实际上都存储在内存中)。

    eg:记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:

    rw-file-utf-8

    bytes数据类型有固定表示:b

    x = b'ABC'

    对于理解这里需要知道,使用byte数据类型就是读取或者写入一个一个字节,计算机就是这么干的。

    编码:

    >>> 'ABC'.encode('ascii')
    b'ABC'
    >>> '中文'.encode('utf-8')
    b'xe4xb8xadxe6x96x87'
    >>> '中文'.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)

    解码:

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

    1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节。

    在操作字符串时,我们经常遇到strbytes的互相转换。为了避免乱码问题,应当始终坚持使用UTF-8编码对strbytes进行转换。

    由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上:

    # -*- coding: utf-8 -*-
  • 相关阅读:
    多台计算机之间数据同步——1.[转]网线制作图解教程
    离心泵的使用注意事项泄露或未排气造成扬程不够
    家庭上网用路由器和ADSL的连接
    专业FLV地址解析
    [求助]带程序访问控制的防火墙 eTrust Personal Firewall 和卡巴斯基2009引起冲突造成系统频繁死机
    DV录像带导出一定要用1394
    Cursor:url()的使用
    理解并解决JavaScript内存泄漏
    CodeIgniter的HMVC
    关于在IE下JavaScript的 Stack overflow at line 错误可能的原因
  • 原文地址:https://www.cnblogs.com/xuhaojun/p/9163467.html
Copyright © 2020-2023  润新知