# 编码问题

-  为什么需要编码问题

  -  本质上计算机只能识别01代码

  -  如何用一长串01代码表示复杂的信息

  -  encode:编码  decode:解码

-  编码简史

  -  二进制

    - bit: 一个0或者1的二进制数字

    - byte:八个01代码,字节

  -  第一阶段: ASCII

  -  第二阶段: 百花齐放,GB2,  GBK,  BIG5,  Latin1,  JIS,

      - Latin1:兼容欧洲大多数语言

      - 中国:GBxxxx

      - 韩国台湾:BIG5

      - 日本:JIS

      - ANSI-MBCS(Multi-bytes character set, 多字节字符集)

  -  第三个阶段:Unicode(ISO)

# 编码表示方法

- ASCII-American standard code for information interchange

  - 所有控制字符(包括回车,删除等)编码再0-31范围以及127

  - 所有标点符号,英文大小写放在32-126之间

  - 预留128-255之间位置

  - 0xxx xxxx 是它的编码形式

- Latin1

  - 0-127的所有位置不动,那么可以兼容ASCII,二进制位0xxx xxxx

  - 128-255位置全部用完,二进制位1xxx xxxx

    - 128-159之间为控制字符,

    - 160-255位文字符号,

    - 其中包括了西欧语言、希腊语、泰语、阿拉伯语、希伯来语

  - 欧元符号

- GBxxxxxxxxxx

  - GB2312

    - 如果一个字节中第一位为0,那么这就是一个ASCII字符。

    - 如果一个字节中第一位为1,那么这个是汉字,认定需要2个字节才表示一个编码的

    - 这个码表中包含汉字6763个和非汉字图形字符682个。

    - 还有很多的空间没有用到,索性全部预留了吧。

    - 0xxxxxxx:表示ASCII字符

    - 1xxxxxxx 1xxxxxxx:表示为汉字

- GBK

    - GB2312基础上添加汉字

    - 兼任GB2312和ASCII

    - 1xxxxxxx xxxxxxxx:表示为汉字

- GB18030

    - 2/4位混编

# Unicode编码

    - 只是一个码表,具体实现没有规定

    - 0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符

    - 中文的编码范围为4E00-9FCF,其中9FC4-9FCF之间的区间没有使用

    - 上述区间全部是汉字,不包含全角字符,不包含特殊文字

    - UTF=UnicodeTransformationFormat

    - UTF-8

        0x0000~0x007F (0 ~ 127)  1字节  0xxxxxxx

        0x0080~0x07FF (128 ~ 2047)  110xxxxx  10xxxxxx

        0x0800~FFFF (2048 ~ 65535)  3字节  1110xxxx  10xxxxxx  10xxxxxx

        0x10000~1FFFFFF(65536 ~ 2097152)      4字节  

        0x2000000~0x3FFFFFF(65536 ~ 2097152)      5字节  111110xx  10xxxxxx

        0x4000000~0x7FFFFFF(65536 ~ 2097152)      6字节  1111110x  10xxxxxx

---------------------------------------------------------------------------------------------------------

Unicode/UCS-4          bit数        UTF-8                byte数       备注
0000 ~ 007F              0~7             0XXX XXXX       1 
                                                    
                                        
0080 ~ 07FF              8~11          110X XXXX           2 
                                       10XX XXXX      
                         
0800 ~ FFFF              12~16      1110XXXX        3             基本定义范围:0~FFFF
                                      10XX XXXX    
                                      10XX XXXX     
                                                    
                         
1 0000 ~  1F FFFF      17~21      1111 0XXX       4             Unicode6.1定义范围:0~10 FFFF
                                       10XX XXXX    
                                                         10XX XXXX    
                                                         10XX XXXX    
                         
                         
20 0000 ~ 3FF FFFF    22~26           1111 10XX       5             说明:此非unicode编码范围,属于UCS-4 编码
                                                          10XX XXXX                    早期的规范UTF-8可以到达6字节序列,可以覆盖到31位元(通用字符集原来的极限)。
                                                          10XX XXXX                    尽管如此,2003年11月UTF-8 被 RFC 3629 重新规范,只能使用原来Unicode定义的区域,
                                                          10XX XXXX                    U+0000到U+10FFFF。根据规范,这些字节值将无法出现在合法 UTF-8序列中                                                                  
                                                          10XX XXXX     
                         
                         
400 0000 ~ 7FFF FFFF   27~31      1111 110X       6 
                                                        10XX XXXX  
                                                        10XX XXXX  
                                                        10XX XXXX  
                                                        10XX XXXX  
                                                         10XX XXXX

-------------------------

- UTF-16,UTF-32

  - UTF-16 早期 Uncode历史遗留问题

  - UTF-32  浪费空间

- UCS-4

  - UCS=UniversalCharacterSet,通用字符集

  - UNS-2与Unicode相同

  - 采用2个字节,定长的表示每一个字符,所以总计可以表示2……16个字符

- UCS-4

  - 第一个字节:表示组(group),最高位为0,则有128个。

  - 第二个字节:表示平面(plane),256个。

  - 第三个字节:表示行(row),256个。

  - 第四个字节:表示码位(cell),256个

  - 如果UCS-4前两个字节为0,则就是CUS-2

#常用概念

  - 编码/解码:有人类可直接读取信息转换成bytes格式的,叫编码,

  - 大尾(BigEndian)和小尾(LittleEndian)

    - '汉'  -> 6C49

    - 6C49 -> BigEndian

    - 496C -> LittleEndian

-  BOM

   - UTF-8没有字节顺序问题

   - UTF-16会出现问题

      - "奎" -> 594E

      - "乙" -> 4E59

   - BOM-ByteOrderMark

      - "ZERO WIDTH NO-BREAK SPACE" -> FEFE,在UCS中不存在

      - FFFF->BigEndian

      - FFFE->LittleEndian

      - UTF-8 用来表示编码,FEFF的UTF-8编码是EF BB BF,

         用来表示此后编码是UTF-8编码

- Python编码问题

- str

- bytes

- bytearray

-------------------------------------------------

- python文件默认utf-8编码,如果特殊需要,需要声明

  - 放在第一行,或者第二行

  - ···# -*- coding: windows-1252 -*-···

  - 读写文件默认utf-8,可以指定

  - code point方式比较字符串,可能会带来问题

      - 重音符号地表示

      - 使用 unicodedata.normalize 函数

 

Python----webserver项目2的更多相关文章

  1. Pycharm+django新建Python Web项目

    这两天初学Python,首先是学习Python语法有PyCharm就可以运行Console程序了,因为是初学所以,尽量写的比较详细,包括参考的资料地址...   1.下载Python,并安装[本文版本 ...

  2. Python(Django)项目与Apache的管理

    (开开心心每一天~ ---虫瘾师) Python(Django)项目交给Apache的管理(一) 准备:Django的环境(Python).Apache.Wsgi(必须文件) 首先需要电脑有Pytho ...

  3. Python(Django)项目与Apache的管理交互

    (开开心心每一天~ ---虫瘾师) Python(Django)项目交给Apache的管理(一) 准备:Django的环境(Python).Apache.Wsgi(必须文件) 首先需要电脑有Pytho ...

  4. 再一波Python实战项目列表

    前言: 近几年Python可谓是大热啊,很多人都纷纷投入Python的学习中,以前我们实验楼总结过多篇Python实战项目列表,不但有用还有趣,最主要的是咱们实验楼不但有详细的开发教程,更有在线开发环 ...

  5. 使用Nginx+Uwsgi部署Python Flask项目

    第一次用Flask做Web(也是第一次用Python做Web),在部署的时候遇到了不少问题,现在将过程就下来,供在这方面也有疑惑的人参考.(PS:使用Apache+mod_wsgi部署模式的可以参考另 ...

  6. 机器学习 Top 20 Python 开源项目

    转自:http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=2652565022&idx=1&sn=9aa035097120 ...

  7. python实战===2017年30个惊艳的Python开源项目 (转)

    本文转自:http://www.sohu.com/a/216723120_115128 摘要:本文来自Mybridge,介绍了过去一年里30个惊艳的Python开源项目.点击每一个都可以在GitHub ...

  8. 10大Python开源项目推荐(Github平均star2135)

    翻译 | suisui 来源 | 人工智能头条(AI_Thinker) 继续假日充电系列~本文是 Mybridge 挑选的 10 个 Python 开源项目,Github 平均star 2135,希望 ...

  9. 32个Python爬虫项目让你一次吃到撑

    整理了32个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1]- 微信公众 ...

  10. Python Django项目部署 Linux 服务器

    项目依赖: Linux Centos7 (阿里云轻量级服务器) + Python 3.7.2 + Django 2.2.1 + restframework 3.9.4 + mysql 5.7 1 安装 ...

随机推荐

  1. 【MM系列】SAP S/4 HANA 1511的BP角色创建及供应商数据的创建方法

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP S/4 HANA 1511的 ...

  2. ELK+Kafka日志收集环境搭建

    1.搭建Elasticsearch环境并测试: (1)删除es的容器 (2)删除es的镜像 (3)宿主机调内存: 执行命令:sudo sysctl -w vm.max_map_count=655360 ...

  3. SSM项目——乐淘商城话述1.0

    乐淘商城 项目介绍 淘淘网上商城是一个综合性的B2C平台,类似京东商城.天猫商城.会员可以在商城浏览商品.下订单,以及参加各种活动.管理员.运营可以在平台后台管理系统中管理商品.订单.会员等.客服可以 ...

  4. HCL试验3

    PC端配置:配置ip地址 配置网关 交换机(左)配置:①创建VLAN system-view vlan 10 vlan 20 ②配置PC端接口 interface gi 1/0/1 port link ...

  5. firewalld防火墙简介

    1.防火墙 防火墙,其实就是一个隔离工具:工作于主机或者网络的边缘 对于进出本主机或者网络的报文根据事先定义好的网络规则做匹配检测, 对于能够被规则所匹配的报文做出相应处理的组件(这个组件可以是硬件, ...

  6. AttributeError: 'dict' object has no attribute 'status_code'

    前端AJAX请求数据,提示错误:“AttributeError: 'dict' object has no attribute 'status_code'”. 原因:是提示返回对象dict没有“sta ...

  7. poj2407(欧拉函数模板题)

    题目链接:https://vjudge.net/problem/POJ-2407 题意:给出n,求0..n-1中与n互质的数的个数. 思路:欧拉函数板子题,先根据唯一分解定理求出n的所有质因数p1,p ...

  8. js中this.index使用

    上面圈出的那句没有执行,因为this.index 是undefined,(也不能直接使用i取代this.index,原因是i不是变化的值,使用alert打印输出的i值始终为3) 解决方式:在for语句 ...

  9. python告诉你啥是佩奇

    被<啥是佩奇>这支广告片刷屏了. 佩奇明明是个喜剧角色, 但是看哭了所有人. <啥是佩奇>??? 效果图如下: # -*- coding:utf-8 -*- from turt ...

  10. RabbitMQ入门教程(十):队列声明queueDeclare

    原文:RabbitMQ入门教程(十):队列声明queueDeclare 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https:// ...