zoukankan      html  css  js  c++  java
  • 字符编码

    二进制换算等级

    8bit = 1Bytes
    1024Bytes = 1KB
    1024KB = 1MB
    1024MB = 1GB
    1024GB = 1TB
    1024TB = 1PB

    字符编码发展史

    字符编码表
    ASCII码 只有英文字母和符号与数字的对应关系
    用8位二进制(1bytes)表示一个英文字符
    
    GBK:中文 英文 符号与数字对应关系
    用2bytes表示一个中文符号 兼容英文字符
    
    shift:日国
    
    euck:韩国
    
    unicode:万国码
    
    utf-8:

    各个编码特点

    ASCII:表达数量有限 但单位体积小
    
    GBK:在ASCII码基础上添加了更多的中文文字的表达二进制,但单位体积增大
    
    unicode:在各个国家自己的编码的基础上规定了16个bit就是2字节来表示各国的文字,每个国家的文字对应unicode都有一个对应的关系表,缺点字母体积翻倍,不利于纯属和减慢了1倍的传输效率.
    
    utf-8:在unicode的基础上更加灵活,字母为1个字节,中文为3个字节等等.虽然中文变3个字节,但是总体的效率依然是比gbk更高,所以还是以utf-8为主流编码格式

    编码解码的python方法

    res1 = bytes(x,encoding='utf-8')
    print(res1,type(res1))
    res2 = str(res1,encoding='utf-8')
    print(res2,type(res2))
    
    
    
    res = x.encode('utf-8')
    print(type(res))
    print(res.decode('utf-8'))

    保证不乱码的核心:
    当初以什么编码存的(encode) 就以什么编码取(decode)

    文件头

    # coding:编码格式  列入:  # coding:utf-8        美化点可以写成这样:  # -*- coding:utf-8 -*-

    识别python代码问题

    如果不指定文件头 中文没法存储 那是因为python2解释器识别语法存储数据的时候默认使用的是ASCII
    如果指定了文件头 python2解释器识别语法存储数据的时候使用文件头指定的编码
    
    python2中通常都会在中文的字符串前面加一个u
    x = u''
    告诉python2解释器将上存成unicode的形式

     而python3 将py文件按照文本文件读入解释器中默认使用utf-8

    python诞生之时,unicode并未像今天这样普及,很明显,好的东西你能看得见,龟叔早就看见了,龟叔在python3中将str直接存成unicode,我们定义一个str,无需加u前缀,就是一个unicode

    个人设立的一个编码解码的情境

    设立使用者电脑为window系统为例子.

    以python2X为例:   

      第一步:  我写在屏幕上的数据是gbk,但是运行的时候Python2解释器的原因会把这些数据包括字符串都转化为ascii ,其他都以通过unicode的编码表自动转化为unicode,但是字符串无能为力,因为该字符串为ASCII存储,设立我的字符串为中文,那ASCII码没有正确的表达方式来表达我的这个字符串 这个时候就出现了储存问题.   

      第二步:  之后因为我的电脑是windows,windows默认的编码方式为gbk,这个时候存储的文件编码格式也为为gbk,

      第三步:  然后通过windows终端调用python2来执行这个代码它的默认编码为gbk,相关代码会以gbk解码,转化成unicode到内存中

      问题1: windows上执行其他不会出问题,但是字符串汉字就出现了乱码.

      解决这种情况方法, 在第一步的读取代码的时候就需要设置对应读取编码的文件头 这边的 对应读取 对应的是写在屏幕上的文件内容转化到内存这过程 比如这边设置gbk 那么之后的文件在windows上执行就不会出现问题

  • 相关阅读:
    不变数组 NSArray
    【英雄会】微软题目:几个bing
    单例模式 Singleton
    【实战经验】64位Win7安装+32位Oracle + PL/SQL 解决方法
    如何解决SQL Server数据库查询速度慢
    Linq 学习(1) Group & Join--网摘
    UMeng 友盟的用户数,启动数 等
    浏览器userAgent大全
    VBA 将 ANSI 转换为 UTF-8文件
    C# 中控件 WebBrowser 对 frameset/ iframe 操作和内容获取
  • 原文地址:https://www.cnblogs.com/jinpan/p/11153023.html
Copyright © 2011-2022 走看看