字符字节与编码

字符是人们常用的一些记号,比如”1”, “汉”, “お”,”℃”等等,包括各种语系的语言和一些符号都可以被称为字符。
字节是计算机存储数据的存储单元,是一个8位的二进制数,所以最多只能表示256个数字(0-255)。
编码是大家对计算机如何使用字节来表示一个字符的约定,可分为ASCII编码,ANSI编码(本地化编码),UNICODE编码(国际化编码)三种。

1.ASCII编码:单字节编码。

最初的编码,由一个字节组成,因此只能表示256个字符,但只表示0-9,a-z,A-Z,和一些加减乘除百分号,够老美用了。

后来ISO国际标准组织以ASCII编码为基础,约定了ISO 8859-1编码,又称Latin1编码。(Mysql的默认存储编码)

2.ANSI编码:多字节编码。

如果只有ASCII编码的话,计算机岂不只能表示英文字母和数字还有几个加减乘除号,中文怎么办,阿拉伯文怎么办,日文怎么办?

由于一个字节只能表示255个数字,所以中国约定了GBK编码规则,约定用0x80-0xFF范围内的某两个字节来表示某一个中文字符。

日本约定了JIS编码规则,他们约定0x80-0xFF范围内的某两个字节来表示某个日文字符。

台湾约定了BIG5编码规则,约定0x80-0xFF范围内的某两个字节表示某个繁体中文字符。

所以我们拿到了一个ANSI字节串的时候,我们还必须知道这个字节串的编码,才能将这个字节串转换成相应国家的字符串。

3.UNICODE编码:宽字节编码

(一)“字节”的定义

字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位。

(二)“字符”的定义

字符是指计算机中使用的文字和符号,比如1、2、3、A、B、C、~!·#¥%……—*()——+、等等。

(三)“字节”与“字符”

它们完全不是一个位面的概念,所以两者之间没有“区别”这个说法。不同编码里,字符和字节的对应关系不同:

①ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。

②UTF-8编码中,一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。

③Unicode编码中,一个英文等于两个字节,一个中文(含繁体)等于两个字节。

符号:英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小。

④UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。

⑤UTF-32编码中,世界上任何字符的存储都需要4个字节。

ANSI编码有很多种,但是都只是规定自己国家的语言,这时候出现了UNICODE编码,该编码类似于ANSI,使用多个字节表示一个字符,UNICODE编码把世界上各种主要语言都进行了编码,当然UNICDOE编码也出现了很多种编码方案,比如使用8个二进制位的UTF8以及使用16个二进制位的UTF16等等。

python3 中编码

在py3里,只有 unicode编码格式 的字节串才能叫作str。
其他编码格式的统统都叫bytes,如:gbk,utf-8,gb2312…………
在py3中,==Unicode编码就像是一个枢纽==,例如gbk的格式要想转化成utf-8,那么必须先转化成Unicode,然后再从Unicode转化成utf-8。
在python3中可以利用import chardet来进行文件编码处理

 rawdata =requests.get('http://www.google.cn/').read()chardet.detect(rawdata)

chardet是一个python3自带的库,用于检测文本的编码方式,他会返回一个字典,格式是{==”encoding” : “xxx”, “confidence” :” xxx”==}但是注意它一般只能检测bytes类型的编码格式

字节码:ASCII编码:单字节编码,ANSI编码:多字节编码,UNICODE编码:宽字节编码相关推荐

  1. java 字节码增强原理_深入浅出Java探针技术1--基于java agent的字节码增强案例

    Java agent又叫做Java 探针,本文将从以下四个问题出发来深入浅出了解下Java agent 一.什么是java agent? Java agent是在JDK1.5引入的,是一种可以动态修改 ...

  2. 趣谈unicode,ansi,utf-8,unicode big endian这些编码有什么区别

    从头讲讲编码的故事.那么就让我们找个草堆坐下,先抽口烟,看看夜晚天空上的银河,然后想一想要从哪里开始讲起.嗯,也许这样开始比较好-- 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同 ...

  3. JAVA类加载对字节码的处理_深入理解Java虚拟机(类文件结构+类加载机制+字节码执行引擎)...

    [本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 周志明的< ...

  4. ASCII码对照表(C++17 实现ANSI、UTF8、Unicode字符编码互转)

  5. JVM笔记:Java虚拟机的字节码指令详解

    1.字节码 Java能发展到现在,其"一次编译,多处运行"的功能功不可没,这里最主要的功劳就是JVM和字节码了,在不同平台和操作系统上根据JVM规范的定制JVM可以运行相同字节码( ...

  6. java编译类代码_Java的源代码中定义几个类,编译结果就生成几个以“.class”后缀的字节码。...

    [填空题]一个类实现某个接口时必须实现接口中声明的所有方法,否则该类必须定义为(__); [单选题]若有定义int a = 2;则执行完语句a += a -= a * a; 后,a的值是( ) [填空 ...

  7. jvm(8)-虚拟机字节码执行引擎

    [0]README 0.1)本文转自 "深入理解jvm",旨在学习 虚拟机字节码执行引擎 的基础知识: [1]概述 1)物理机和虚拟机的执行引擎: 物理机的执行引擎是直接建立在处理 ...

  8. jvm(6)-java类文件结构(字节码文件)

    [0]README 0.1)本文部分文字描述转自 "深入理解jvm",旨在学习类文件结构  的基础知识: 0.2)本文荔枝以及荔枝的分析均为原创: 0.3)下面的截图中有附注t*编 ...

  9. 深入理解Java虚拟机(周志明第三版)- 第八章:虚拟机字节码执行引擎

    系列文章目录 第一章: 走近Java 第二章: Java内存区域与内存溢出异常 第三章: Java垃圾收集器与内存分配策略 代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言 ...

  10. 宽字节 多字节 单字节 的问题

    感觉比较混乱,学习了一通,做个记录. 着急在windows下面用的话,可以先看这个: VC++ Windows平台字符透明编程大总结 http://blog.csdn.net/hellothere/a ...

最新文章

  1. Ascend Pytorch算子适配层开发
  2. oracle11g安装过程提示swap size 检查失败问题
  3. 设计模式(19)-Observer Pattern
  4. 实例方法-扩展器-生命zhou
  5. 读书笔记 - 《重新定义公司:谷歌是如何运营的》
  6. 【广告技术】如何科学地划分用户群体?在聚类中考虑用户特征和社会关系
  7. “VT-x is disabled in BIOS”的解决办法【Android Studio】【操作环境:win 7 台式机】【查看Android Studio版本】
  8. 论文笔记(Attentive Recurrent Social Recommendation)
  9. 《完美软件》读书笔记9:良好测试的要素
  10. Centos7.X自带的防火墙和服务的相关的配置
  11. 【机器学习】21个机器学习面试问答
  12. 智能暖风机——8.云端控制
  13. Tangent Element调色台的设计和功能同等重要
  14. 三点运算符(三点语法)
  15. 最长等差数列_最长等差子序列的长度
  16. CISCO和华为交换机修改密码
  17. 【我参加NVIDIA Sky Hackathon】CV篇
  18. 转--Python标准库之一句话概括
  19. PowerApps入门——PowerApps的3种打开方式
  20. 企业开发的困境与变局

热门文章

  1. 回头再说 008 瞬
  2. ccf-csp 2015春季真题题解
  3. 研究生带28岁腼腆导师一起相亲?被女生围追堵截要微信!
  4. 当前提审小程序包中可能包含明文的AppSecret,解决办法
  5. 范宇的Python学习笔记
  6. CH340G 无法识别的USB设备
  7. HTML制作搞笑照片,搞怪相片大制作,个性搞怪照片,特效照片制作
  8. 某型雷达的报文收发实录
  9. jquery选择器中含有不含有空格的问题
  10. 错误 不存在从 “std::string“ 到 “LPCSTR“ 的适当转换函数