zoukankan      html  css  js  c++  java
  • 编码学习

    文字在计算机怎么显示

    ASCII

    创建于1967年左右
    完善于1980年左右
    该表将计算机的每一个字符用数字表示

    GB2312

    诞生于1981年
    开始收录了6000+常用汉字和600+常用符号
    常用编码为EUC-CN、也有HZ这个编码(主要用于email中)

    • EUC-CN中,英文一个字节,中文两个字节
    • HZ中英文都为一个字节

    GBK

    发布于1995年
    有20000+个字
    GB2312的升级

    cp936

    微软(IBM也有,这里主要讲微软)也发布于1995年
    借鉴了GBK
    微软公司为世界各地的版本而开发的编码,中文正好在936页,cp为code page。取名为cp936

    GB18030

    发布于2000及2005
    00版本20000+字
    05版本70000+字
    参考了unicode

    Unicode

    包含了世界上所有的字符!
    最早发布于1991年,有7000+字符
    最近更新版本为2019年版Unicode12.0,共130000+字符

    常用编码:

    1. UCS-2 使用两个字节进行表示,不过上限为65526,当今已用不到了
    2. UCS-4/UTF-32 使用四个字节表示,不过对于英文太过于浪费
    3. UTF-16 一般使用16位进行表示,对于一些需要4字节编码的字使用32位表示是一个可变长的编码
    4. UTF-8 也是属于可变长的编码,英文使用一个字节,中文一般三个字节(有识别位),最多可以表示到6个字节
    5. UTF-7 用于email,email设计之初只接纳英文,不接受其它字,UTF-7使email可以接收其它字

    Base64编码

    不是文字编码的一种基本格式,主要是用于文件传输中的隐蔽性,相比于其他用于加密的编码,Base64简短,且在文件传输时,具有不可读性

    加密过程:
    Man 
    4D 61 6E					# 16进制ASCII 
    01001101 01100001 01101110	# 2进制ASCII
    010011 010110 000101 101110	# Base64加密,高位加两个0
    00010011 00010110 00000101 00101110
    19 22 5 46					# 10进制形式
    T W F u						# 根据Base64表
    

    区别字符集和编码

    字符集:Charset 字符的集合 只收录所有的字符,不管该字符在计算机中的表示
    Code Point:Unicode的概念,字符对应的编号(不是在计算机里的编码)
    编码:Encoding ,字符在计算机中的表示

    大端和小端之争

    计算机底层在对于类似AB这种编码时,会采用AB和BA两种底层处理方式,主要是CPU制造商引起的,

    1. 低到高位(大端) PowerPC IBM公司
    2. 高到低位(小端) Intel公司

    文字编码也有类似的问题

    • 解决方法:在文件头部设定标记(BOM Bity Order Mark)也叫炸弹,来表示编码是大端还是小端

    操作系统编码

    Windows使用cp936(GBK)
    Linux使用UTF-8
    在传文件时处理不当可能会在成乱码

    代码中的编码

    只能识别英文的编程语言

    C:没有string,使用二进制或字节流表示
    C++:有string,但是没有编码,相当于字节流 (两种都可以使用第三方的库解决)
    python2:字节流,中文占三个字节,UTF-8编码

    可以识别中文的编程语言

    python3:每一个字符占的长度是一字节

    小笔记

    2个16进制 = 8个2进制
    一般显示可以直接显示2个16进制,省空间

    GBK转UTF-8

    使用了冗余信息,UTF-8字符头

    54 1b						# 比如一个汉字两个字节(这里使用16进制表示)
    101 0100 0001 1011			# 用二进制表示
    101 010000 011011			# 转码的过程,根据字节数分类,Unicode中的汉字一般三个字节
    c5 90 9b	
    1100 0101 10 010000 10 011011  	
    

    jpg文件
    jpg文件存的是每一个像素的色号

  • 相关阅读:
    MaltReport2:通用文档生成引擎
    PostgreSQL 10 如何使用 PgAdmin3
    Stackoverflow 珠玑:C#封装重试指定次数的功能
    C# 6 元组应用 Part 2:C# 也玩模式匹配
    C# 6 元组应用 Part 1:方便的字典工厂方法
    Stackoverflow 珠玑:用于分组的 LINQ 扩展方法
    Linux 下的 PostgreSQL 数据库+文件通用自动备份脚本
    让 Odoo POS 支持廉价小票打印机
    NopCommerce 根据手机浏览器和桌面浏览器切换 Theme
    为什么 C# 比 C++ 编译快那么多
  • 原文地址:https://www.cnblogs.com/labster/p/13258152.html
Copyright © 2011-2022 走看看