常见编码总结

本文总结自:https://blog.csdn.net/zmx729618/article/details/51821024

 

1. ISO 8859-1

字节数:1

范围:0-255(编码范围是0x00-0xFF),其中0x00-0x7F之间完全和ASCII一致(ASCII是7位编码,能个表示128个字符),因此向下兼容ASCII

表达范围:多用于英文系列,还包括西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。。。无法表示中文字符。

备注:由于ISO-8859-1编码范围使用了单字节内的所有空间,在支持ISO 8859-1的系统中,传输和存储其他任何编码的字节流都不会被抛弃。换言之,把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题(可以用它表示其他编码)。

这是个很重要的特性,所以很多情况下(如很多协议传输数据时)都使用ISO 8859-1编码。

 

 

2. GB2312/BIG5/GBK 

GB2312

范围:ISO 8859-1的范围+简体中文

字节数:表达汉字时2个字节,表达英文1个字节,与ISO 8859-1一致,属于变长编码系统

BIG5

表达繁体汉字,多与GB2312结合使用

GBK

为解决GB2312与BIG5不兼容问题而诞生

范围:ISO 8859-1的范围+ 所有亚洲文字的双字节字符,包括简体中文,繁体中文,日语,韩语等

字节数:类似于GB2312,属于变长编码系统

 

3. Unicode

范围:所有语言

字节数:2个字节,包括英文字母在内,都以双字节表示,所以它是不兼容ISO 8859-1编码的。对于ISO 8859-1中所编码的字符,Unicode编码只是在前面增加了一个全为0字节

 

4. UTF/UTF-8/UTF-16/UTF-32

UTF

Unicode编码不兼容ISO 8859-1编码,而且容易占用更多的空间:因为对于英文字母,Unicode也需要两个字节来表示,所以Unicode不便于传输和存储。因此而产生了UTF编码。

UTF是(Unicode Translation Format),即Unicode用于传输的格式。

 

UTF-32

字节数:4

Linux操作系统上所使用的Unicode方案,也是一种定长编码。其缺点很显然是造成了空间的巨大浪费,从而非常没有效率,因此没有UTF-8和UTF-16使用的频繁,不做赘述。

 

UTF-16

字节数:2

但是,上文已经提到,Unicode基本多语言平面的字符只使用2个字节就可以表示了,真正需要扩展到4个字节来表示的字符少之又少。所以使用2个字节来表示Unicode代码是一种很自然的选择,例如英文的Unicode范围是0x0000-0x007F,中文的Unicode范围是0x4E00-0x9F**。对于那些扩展平面中需要4个字节才能表示的字符,UTF-16使用一种代理的手法来扩展(使用了基本多语言平面保留的0xD800-0xDFFF区段,表示这是一个代理,从而用2个16位码元组成一个字符)。这样的好处是大量的节约了存取空间,也提高了处理的速度。这种Unicode表示方法就是UTF-16,显然,UTF-16需要1个或者2个16位长的码元来表示,因此这是一个变长表示。一般在Windows平台上,提到Unicode,那就是指UTF-16了。

UTF-16有一个著名的Endian的问题,即UTF16-LE和UTF16-BE,LE指Little Endian,而BE指Big Endian。关于这方面的信息,网上有很多相关的帖子。这与计算机的CPU架构有一定关系,我们一般的X86系统都是Little Endian的,可以认为UTF16就是UTF16-LE。

另外,UTF有一个BOM(Byte Order Mark)的问题。在Unicode编码中有一个叫做"zero-width no-break space (ZWNBSP)"的字符,它的编码是0xFEFF。而0xFEFF在是一个实际中不存在的字符,所以不应该出现在实际传输中。UCSUCS (Unicode Character Set) 规范建议我们在传输字节流前,先传输字符"ZWNBSP"。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little- Endian的。因此字符"ZWNBSP"又被称作BOM。

 

UTF-8

字节数:1-6个不等,例如中文,3个字节,英文,1个字节,兼容ISO 8859-1

UTF16的最大好处在于大部分字符都以固定长度的字节(2字节)储存,但UTF-16却无法兼容于ASCII编码。由于对于欧洲和北美,实际上使用的编码范围在0x0000-0x00FF之间,只需要一个字符就可以表示所有的字符。即使是使用UTF16来作为内存的存取方式,还是会带来巨大的空间浪费,因此就有了UTF8的编码方式。

UTF-8编码是最灵活的UTF编码形式,即兼容ISO 8859-1的编码,同时也可以用来表示所有语言的字符。显然,UTF-8编码是不定长编码,每一个字符的长度从1-6个字节不等。另外,UTF编码自带简单的校验功能。

备注:

理论上将,UTF-8 格式使用1-6字节,最大能编码 31 位字符,但最新的 UTF-8规范也只使用1-4个字节,最大能编码21位。

不同平台对UTF-8的支持不相同,例如低版本的低版本的MySQL只支持到3字节

 

UTF8mb4

utf8mb4比utf8多了对emoji编码支持

 

转载于:https://www.cnblogs.com/yanze/p/9922894.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

启动一个Java进程

windows版本 startup.bat -------------------------------------------------------- rem --------------------------------------------------------------------------- rem Start SMS Server by zhangjin rem --------------------------------------------------------…

Flask框架从入门到精通之参数配置(二)

知识点: 1、参数配置 一、概况 上一篇我们已经把Flask第一个程序运行起来了,那么这一篇主要讲一下Flask参数的配置。 二、配置参数 Flask参数配置方式有很多种,每一种都可以达到结果,在合适的场景选择合适的配置方式。 配置文件 在…

BP神经网络python简单实现

BP神经网络的原理在网上有很详细的说明,这里就不打算细说,这篇文章主要简单的方式设计及实现BP神经网络,并简单测试下在恒等计算(编码)作测试。 BP神经网络模型图如下 BP神经网络基本思想 BP神经网络学习过程由信息的…

golang的reflection(转)(一)

2019独角兽企业重金招聘Python工程师标准>>> 反射reflection 可以大大提高程序的灵活性,使得interface{}有更大的发挥余地反射可以使用TypeOf和ValueOf函数从接口中获取目标对象信息反射会将匿名字段作为独立字段(匿名字段的本质)…

idea教程--Maven 骨架介绍

简单的说,Archetype是Maven工程的模板工具包。一个Archetype定义了要做的相同类型事情的初始样式或模型。这个名称给我们提供来了一个一致的生成Maven工程的方式。Archetype会帮助作者给用户创建Maven工程模板,并给用户提供生成相关工程模板版本的参数化…

datatables.js 简单使用--多选框和服务器端分页

说明:datatables是一款jQuery表格插件。感觉EasyUI的datagrid更易用 内容:多选框和服务器端分页 缘由:写这篇博客的原因是datatables的文档写的不怎么样,找东西很麻烦 环境:asp.net mvc , vs2015sqlserver2012 显示效…

python异常(高级) Exception

异常(高级) Exception 异常回顾:     try-except 语句 捕获(接收)异常通知,把异常流程变为正常流程     try-finally 语句 执行必须要执行的语句.     raise 语句 发送异常通知,同时进入异常流程     assert 语句 发送AssertionError异常     with 语句 wi…

反射赋值

目前例子为NPOI Excel导入 入库时调用 var file file1.PostedFile.InputStream;var fileExt System.IO.Path.GetExtension(file1.FileName);IWorkbook workbook;if (fileExt ".xlsx")workbook new XSSFWorkbook(file);elseworkbook new HSSFWorkbook(file);DB.D…

基于PCA(主成分分析)的人脸识别

代码下载:基于PCA(主成分分析)的人脸识别 人脸识别是一个有监督学习过程,首先利用训练集构造一个人脸模型,然后将测试集与训练集进行匹配,找到与之对应的训练集头像。最容易的方式是直接利用欧式距离计算测…

从BMW Vision iNEXT 看宝马如何进军自动驾驶

安全很重要,空间也要很大,砍掉大量物理按键,内饰材料要环保,还要提供自动和主动两套驾驶方案。这些描述仅是BMW Vision iNEXT(下称Vision iNEXT)概念车的设计之冰山一角。 一款概念车当然无法完全代表未来…

CSS浮动(二)---Float

重新认识float 2.1. 误解和“误用” 既然提到“误用”,各位看官就此想想,自己平日是怎么使用float的?另外,既然“误用”加了引号,就说明这样的使用并不是真正的误用,而是误打误撞使用之后,带…

Hadoop0.20.2版本在Ubuntu下安装和配置

1、安装JDK   (1)下载安装JDK:确保计算机联网之后命令行输入下面命令安装JDK   sudo apt-get install sun-java6-jdk   (2)配置计算机Java环境:打开/etc/profile,在文件最后输入下面内容 …

云原生生态周报 Vol. 2

业界要闻 Kubernetes External Secrets 近日,世界上最大的域名托管公司 Godaddy公司,正式宣布并详细解读了其开源的K8s外部 Secrets 管理项目: Kubernetes External Secrets,简称KES。这个项目定义了ExternalSecrets API&#xff…

centos 7新机使用前操作

关闭防火墙 systemctl stop firewalld(停服务) systemctl status firewalld(看状态) systemctl disable firewalld.service (永久关闭) selinux getenforce(查状态) vi /etc/selinux…

ubuntu10.04+hadoop0.20.2平台配置(完全分布式模式)

配置环境及有关工具:ubuntu10.04 、hadoop0.20.2 、 jdk1.6.0_29 我们的机器有三台,一台当作namenode、两台当作datanode: namenode:IP:192.168.0.25、机器名:kiddenzj (这里的机器名要注意:机…

成佛、远不止渡沧海

地之及东南,有一海,称为“沧海”。沧海对面,就是仙家佛地。凡是能渡过沧海到达彼岸的人,就能立地成佛,修成正果。 于是,许许多多的人千里迢迢赶来,或乘帆船,或乘木筏,纷纷…

软件架构演进

传统架构到分布式架构详解 软件架构演进软件架构的发展经历了从单体架构、垂直架构、SOA架构到微服务架构的过程,博客里写到了这四种架构的特点以及优缺点分析,个人学习之用,仅供参考! 1.1.1 单体架构 特点:1、所有的…

hadoop0.20.0第一个例子

这是Hadoop学习全程记录第2篇,在这篇里我将介绍一下如何在Eclipse下写第一个MapReduce程序。 新说明一下我的开发环境: 操作系统:在windows下使用wubi安装了ubuntu 10.10 hadoop版本:hadoop-0.20.2.tar.gz Eclipse版本&…

IDEA 修改JavaWeb的访问路径

问题描述 对于我这个刚刚使用IDEA不久的新手来说,能够正常运行就不错了,不过到了后面,可能会觉得IDEA给你分配的默认访问路径很不顺手,比如访问的时候需要通过: http://localhost:8080/web_war_exploded/ 来访问,对于web_w…

防撞库基本要求

专用安全要求 口令要求 设计要求说明 要求 是否满足 密码长度至少 8位字符,密码复杂性要求至少包含以下4种类别中的2种:大写字母、小写字母、数字、特殊符号 必选 满足 系统应具备对口令强度检测的能力,并对用户进行提示(尽量不要…