zoukankan      html  css  js  c++  java
  • 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 -*-
  • 相关阅读:
    JavascriptCore中扩展自定义函数
    Qt for Symbian应用的开发转载
    Qt Symbian 开发环境安装转载
    qt屏幕抓图
    为JavascriptCore添加自定义对象
    Tesseract OCR开源项目转载
    Joomla, Wordpress, Drupal 全面详细Pk比较转载
    Drupal,Joomla,Wordpress在内置应用功能方面的区别和比较转载
    Docker:第五章:基于centos7的docker安装配置部署教程以及基于docker Tomcat镜像使用的项目部署教程
    【JavaP6大纲】Redis篇:redis集群工作原理,协议,分布式寻址算法
  • 原文地址:https://www.cnblogs.com/xuhaojun/p/9163467.html
Copyright © 2011-2022 走看看