Unicode 是「字符集」

Unicode为世界上所有字符都分配了一个唯一的数字编号,这个编号范围从 0x000000 到 0x10FFFF(十六进制),有110多万,每个字符都有一个唯一的Unicode编号,这个编号一般写成16进制。例如「知」的码位是 30693,记作 U+77E5(30693 的十六进制为 0x77E5)。

它是一种规定,Unicode本身只规定了每个字符的数字编号是多少,并没有规定这个编号如何存储。

Unicode是定长的都为双字节

UTF-8 是「编码规则」

Unicode是一个字符集,而UTF-8是Unicode的其中一种,Unicode是定长的都为双字节,而UTF-8是可变的,对于汉字来说Unicode占有的字节比UTF-8占用的字节少1个字节。Unicode为双字节,而UTF-8中汉字占三个字节。

其中:  字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point)

编码规则:将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)

UTF-8 顾名思义,是一套以 8 位为一个编码单位的可变长编码。会将一个码位编码为 1 到 4 个字节这个变化是根据 Unicode 编号的大小有关,编号小的使用的字节就少,编号大的使用的字节就多。

UTF-8使用1~4字节为每个字符编码:

·一个US-ASCIl字符只需1字节编码(Unicode范围由U+0000~U+007F)。

·带有变音符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文等字母则需要2字节编码(Unicode范围由U+0080~U+07FF)。

·其他语言的字符(包括中日韩文字、东南亚文字、中东文字等)包含了大部分常用字,使用3字节编码。

·其他极少使用的语言字符使用4字节编码

UTF-8是这样做的:

1. 单字节的字符,字节的第一位设为0,对于英语文本,UTF-8码只占用一个字节,和ASCII码完全相同;

2. n个字节的字符(n>1),第一个字节的前n位设为1,第n+1位设为0,后面字节的前两位都设为10,这n个字节的其余空位填充该字符unicode码,高位用0补足。

Unicode符号范围     |        UTF-8编码方式
(十六进制)        |              (二进制)
----------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

因此:是任何字符对应的数字保存时所占的空间是可变的,使用一至四个字节为每个字符编码,其中大部分汉字采用三个字节编码,少量不常用汉字采用四个字节编码.而UTF-8由于里面有额外的标志信息,所有一个字节只能表示2的7次方128个字符,两个字节只能表示2的11次方2048个字符,而三个字节能表示2的16次方,65536个字符。

UTF-16

UTF-16:使用二或四个字节为每个字符编码,其中大部分汉字采用两个字节编码,少量不常用汉字采用四个字节编码。是任何字符对应的数字都用两个字节来保存,但如果都是英文字母(一个字节能表示一个字符)这样做有点浪费。由于UTF-16不需要用其它字符来做标志,所以两字节也就是2的16次能表示65536个字符

GB2312字符集

GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBK大.

GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:
GBK、GB2312--Unicode--UTF8
UTF8--Unicode--GBK、GB2312

具体见:

Windows下,Unicode、UTF8,GBK(GB2312)互转_小飞侠hello的博客-CSDN博客_gbk转gb2312

Unicode字符集下UTF-8 、UTF-16编码和GBK(GB2312)字符集相关推荐

  1. 你不知道的 字符集和编码(编码字符集与字符集编码)

    我的上篇文章,有朋友提出字符集和编码的区别,我在此立文和大家讨论下 常说的字符集和编码区别,其实就是编码字符集和字符集编码的区别,其实,单单如果只是说字符集,没有任何编码的概念的话,那么字符集其实仅仅 ...

  2. ZendStudio中,缺少gbk gb2312编码的解决办法

    自己用zend也好久了,对于文件的编码转换,也没太注意,可最近在新电脑上安装zend后, 由于文件是gbk编码的,默认utf-8编码会出现乱码, 于是,自己还是按照以前的方法 edit → Set E ...

  3. Unicode、UTF 和 ISO-8859-1等编码方式详解与浏览器URL编码

    将字符转换为二进制码的过程,我们称为编码,将二进制码转换为字符的过程,我们称为解码. 编码和解码时所采用的规则,我们称为字符集 常见的字符集: ASCII - 美国人编码,使用7位来对美国常用的字符进 ...

  4. Unicode字符集下CString与char *转换 (解决中文乱码等)(转)

    UniCode 下 CString 转 char* 的方法的文章有很多,但是大部分都是在互相转载,看了那么多资料,仍然没有解决乱码的问题,后来从一个论坛的一条回复里面找到了正确的方法,特此拿出来与大家 ...

  5. Unicode字符集下WriteFile中文处理

    最近在使用WriteFile函数时发现,vc2008中unicode字符集下处理中文乱码的一些解决方法,归纳如下 1. 写入的时候采用多字节char类型 HANDLE hFile;DWORD nByt ...

  6. Unicode字符集下CString/tchar*与char *转换 (解决中文乱码等)

    Unicode环境下宽字符------->窄字符的转换 定义:TCHAR m_szIp[MAX_IP_LEN];   我们要将TCHANR类型数组(宽字符型)转换为char*pBuffer类型( ...

  7. 关于编码ansi、GB2312、unicode与utf-8的区别

     关于编码ansi.GB2312.unicode与utf-8的区别 2014-01-25 08:51 529人阅读 评论(0) 收藏 举报 本文章已收录于: 关于编码ansi.GB2312.uni ...

  8. 【JAVA编码专题】JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础

    这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...

  9. AJPFX解析关于编码ansi、GB2312、unicode与utf-8的区别

    大家平时遇到乱码问题是否有自己的一套解决方案?这篇文章就是介绍一下常用的编码方式 关于编码ansi.GB2312.unicode与utf-8的区别 先做一个小小的试验: 在一个文件夹里,把一个txt文 ...

  10. 计算机ucs汉字编码,字符编码基础知识 - Unicode,UCS,GBK,GB2312,UTF-8

    字符编码基础知识- Unicode,UCS,GBK,GB2312,UTF-8 最近遇到一个Unicode和UTF-8关系比较的问题,之前在处理中文显示时也遇到过类似的问题,于是花时间学习了一下,在此做 ...

最新文章

  1. 开平方的 7 种算法
  2. KVM虚拟机添加虚拟磁盘
  3. linux 中FTP服务器的架设
  4. 【深度学习】Transformer在语义分割上的应用探索
  5. Spring常见注解
  6. DW的代码格式化和净化功能
  7. 使用BeetleX网关对Web应用进行灰度发布
  8. oracle执行计划结果分析_优化体系--sql整体优化(调优工具分析)
  9. AutoCAD Electrical(ACE)的基本操作——新建项目、绘制电气原理图、线路标号
  10. java 获取图片后缀_java 自动识别图片文件类型 图片后缀 图片类型
  11. java 时间是24小时制吗_java时间24小时制
  12. 经典SQL练习——详细到令人发指(未完待续)
  13. 4.2 期货每日早盘操作建议
  14. 关于trigger的muting table异常
  15. Vue中的component
  16. kotlin中的var和val与编译时常量
  17. Ajax入门-搭建服务器并使用ajax技术向服务器发送一个请求并获得服务器返回的数据
  18. 177本名著浓缩成了177句话
  19. discuzx update sitekey.php,Discuz如何清除应用中心密码附加工具
  20. 【Python】 计算最大回撤率(金融工程)

热门文章

  1. 001_动力节点_SpringMVC4_SpringMVC简介
  2. 什么是WAF(lua+nginx)
  3. 蜂巢式技术阵营简化IoT蓝图
  4. 转:基于Jmeter的MQTT测试插件
  5. 有道词典在谷歌Chrome浏览器中无法取词的解决方法
  6. java中的map是什么_Java中Map的使用
  7. jlink v9可升级固件‘_在rt-thread下实现OTA在线固件更新功能
  8. RazorPage语法介绍(二)
  9. 小程序普通二维码配置
  10. 学MySQL,这篇万字总结,真的够用了