Python----webserver项目2
# 编码问题
- 为什么需要编码问题
- 本质上计算机只能识别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的更多相关文章
- Pycharm+django新建Python Web项目
这两天初学Python,首先是学习Python语法有PyCharm就可以运行Console程序了,因为是初学所以,尽量写的比较详细,包括参考的资料地址... 1.下载Python,并安装[本文版本 ...
- Python(Django)项目与Apache的管理
(开开心心每一天~ ---虫瘾师) Python(Django)项目交给Apache的管理(一) 准备:Django的环境(Python).Apache.Wsgi(必须文件) 首先需要电脑有Pytho ...
- Python(Django)项目与Apache的管理交互
(开开心心每一天~ ---虫瘾师) Python(Django)项目交给Apache的管理(一) 准备:Django的环境(Python).Apache.Wsgi(必须文件) 首先需要电脑有Pytho ...
- 再一波Python实战项目列表
前言: 近几年Python可谓是大热啊,很多人都纷纷投入Python的学习中,以前我们实验楼总结过多篇Python实战项目列表,不但有用还有趣,最主要的是咱们实验楼不但有详细的开发教程,更有在线开发环 ...
- 使用Nginx+Uwsgi部署Python Flask项目
第一次用Flask做Web(也是第一次用Python做Web),在部署的时候遇到了不少问题,现在将过程就下来,供在这方面也有疑惑的人参考.(PS:使用Apache+mod_wsgi部署模式的可以参考另 ...
- 机器学习 Top 20 Python 开源项目
转自:http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=2652565022&idx=1&sn=9aa035097120 ...
- python实战===2017年30个惊艳的Python开源项目 (转)
本文转自:http://www.sohu.com/a/216723120_115128 摘要:本文来自Mybridge,介绍了过去一年里30个惊艳的Python开源项目.点击每一个都可以在GitHub ...
- 10大Python开源项目推荐(Github平均star2135)
翻译 | suisui 来源 | 人工智能头条(AI_Thinker) 继续假日充电系列~本文是 Mybridge 挑选的 10 个 Python 开源项目,Github 平均star 2135,希望 ...
- 32个Python爬虫项目让你一次吃到撑
整理了32个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1]- 微信公众 ...
- Python Django项目部署 Linux 服务器
项目依赖: Linux Centos7 (阿里云轻量级服务器) + Python 3.7.2 + Django 2.2.1 + restframework 3.9.4 + mysql 5.7 1 安装 ...
随机推荐
- flutter详解路由栈(二)
前面,我们已经知道如何简单在路由栈中 push.pop 实例,然而,当遇到一些特殊的情况,这显然不能满足需求.学习 Android 的同学知道 Activity 的各种启动模式可以完成相应需求,Flu ...
- Django开发—如何重置migration
情景一:不需要原有的数据库数据 删除数据库所有的表删除项目的migration模块中的所有 文件,除了init.py 文件执行脚本 python3 manage.py makemigrations p ...
- nginx+keepalived(双主)
一.环境 nginx1 192.168.40.211 nginx2 192.168.40.132 vip1 192.168.40.223 主为keep1,从为keep2 vip2 ...
- [ASP.NET] [JS] GridView点击高亮当前选择行,并在点击另一行时恢复上一选择行背景颜色
在ASP.NET中的gridview控件里面可以通过设定其OnRowDataBound事件来进行实现高亮当前行的操作 前端控件的设置: 只要设置好OnRowDataBound属性即可,会自动在.cs文 ...
- C语言作业11
问题 答案 这个作业属于那个课程 C语言程序设计 这个作业要求在哪里 https://www.cnblogs.com/galen123/p/11996995.html 我在这个课程的目标是 在学好C语 ...
- CentOS 上面 恢复 Oracle 数据库实例的简单操作流程
1. 当获取了数据库的备份可以进行 oracle数据库的备份恢复操作 linux上面要复杂一些. 这里面简单描述一下. 2. 远程连接 linux 主要工具可以选择 xshell 如图示: 3. 建议 ...
- sqlserver with(nolock)而mysql 不需nolock
nolock 是 SQL Server 特有的功能. 例如:对于一个表 A,更新了一行,还没有commit,这时再select * from A 就会死锁.用select * from A(noloc ...
- docker安装教程-centos
Docker 要求CentOS 系统的内核版本在3.10以上,查看本页面的前提条件来验证你的CentOS 版本是否支持Docker . 1.通过uname -r 命令查看你当前的内核版本 uname ...
- CentOs7 防火墙的开放与关闭及端口的设定
1.查看firewall服务状态 systemctl status firewalld 2.查看firewall的状态 firewall-cmd --state 3.开启.重启.关闭.firewall ...
- WebApi 生成帮助文档及顺便创建简单的测试工具
http://www.2cto.com/kf/201607/522971.html ==========最终的效果图========== ==========下面开始干活========== 一.创建 ...