原文地址:http://www.360doc.com/content/19/0511/11/277688_834971939.shtml

总结:这和编码有关,UTF8一个汉字占3个字节,GBK一个汉字占2个字节。

当我上第一节计算机课的时候,我的电脑老师跟我说,一个英文字符是1个字节,一个中文是2个字节。这么多年来,我对此一直坚信不移,相信很多人也是这么觉得的,但是,真实情况下是这么一回事么?

要了解这个问题,我们首先得从字节说起,什么是字节呢?要知道,在计算中,底层都是晶体管的开关和关闭状态,我们把一个表示开关状态的称之为位,把八位称之为一个字节,也就是一个字节可以表示(00000000-11111111),也就是0到255。为什么是8位呢?因为字符实际上还不到128个,按道理7位就够了,一个说法是程序员也比较迷信,认为7是个不吉利的数字,另一种说法,8刚好是2^3的方,更容易计算机去理解。

ASCII(美国信息交换标准代码)是美国人用来对拉丁字符进行的编码。因为计算机是美国人发明的,所以他们也没考虑其他国家可能也要用到计算机。下面是一个ASCII编码的对应表。

后来随着计算机的发展,一些不是拉丁字母的国家也开始用计算机了,发现一个字节只能表示256个字符,这明显不够,像我们汉字博大精深,常用的都有几千个,于是常见的中文的编码==GB2312(国家简体中文字符集)==就出现了。GB2312用两个字节来表示一个汉字,例如学习的学,对应的编码就是10010010 0000111。这也就是小时候我们的电脑老师跟我们说的,在计算机中,英文字母占1个字节,汉字占2个字节。

随着互联网的继续发展,不同的国家,不同的语言都用着不同的编码,每当不同的人进行交流,都要先知道对方用的是什么编码,这往往就造成了沟通的成本,而且经常因为编码错误造成各种乌龙。于是,国际上就定一了一种全新的编码方法,全世界所有的字符、文字都有对应的一个编码,以后,就不需要转化成不同的编码了,这便是Unicode编码。Unicode编码使用4个字节来描述一个字符,每个字节8位,理论上就能表示2^32个不同的字符,全世界的字符都没这么多。

但随之又引来一个问题,原先一个英文字符需要1个字节,一个中文需要两个字节,现在需要4个字节,相当于存储变大了。这给网络传输、系统存储都带来了一定的成本。这个时候,人们觉得压缩一下,于是提出了UTF8,UTF16这样的表示方法。

UTF8我们最经常使用,怎么表示呢?对于一个汉字,例如上述学习的学字在Unicode编码中表示为00000000 00000000 01011011 01100110。很明显,前面字节都是0,非常的浪费,最好是能够把它压缩起来,又能让别人知道它原来对应的就是四个字节,怎么办呢?UTF8就是为了解决这个问题,对于原来是双字符的中文,会变成3个字节,第一个字节以1110开头,后面两个以10开头。剩下的16位分摊到这3个字节当中。图中便是这个学字如何从Unicode编码转成utf8编码。

一个汉字到底占几个字节相关推荐

  1. 在数据库中一个汉字到底占几个字节

    首先要知道,一个汉字在MySQL中占几个字节是跟编码方式有关的 GBK编码:一个汉字占2个字节 UTF-8编码:一个汉字占3个字节 一般数据库设置的编码格式都是UTF-8,那就以UTF-8为例,var ...

  2. 一个int类型到底占多少个字节

    一个int占多少个字节? 这个问题我们往往得到的答案是4. 但是int到底占多少个字节,却跟你的机器环境有关. As you can see, the typical data type sizes ...

  3. 一个int类型到底占多少个字节?

    一个int占多少个字节? 这个问题我们往往得到的答案是4. 但是int到底占多少个字节,却跟你的机器环境有关. [html] view plaincopy print? As you can see, ...

  4. 一个汉字真的由两个字节存放吗?

    偶尔间发现了一个程序,让我想起了一个问题:一个汉字真的由两个字节存放吗? 先看一个程序段: //文件名字为test.c #include #include #include int main(int ...

  5. java中汉字究竟占几个字节?

    byte是1个字节,char是两个字节,但是char里可以存一个汉字,这么说汉字就占用两个字节?String类型里的汉字,按照编码格式的不同,分为2-4个字节的占用,UTF-8占用3个字节,特别的占用 ...

  6. 一个指针变量到底占几个字节

    int main() {char ch = 'A';int i = 99;double x = 66.6;char *p = &ch;int *q = &i;double *r = & ...

  7. 一个中文字符占几个字节_字节与字符的关系

    简介 字节(Byte)是计量单位,表示数据量多少,二进制数据,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位.通常在读取图片.声音.可执行文件需要用字节数组来保存文件,在下载 ...

  8. java中char到底占几个字节的问题

    前些天被问到一个问题:java中一个char可以表示一个汉字吗? 我一想char不是占一个字节吗?汉字在utf-8中占三个字节(还有四字节的),char不能够表示!对方一笑,让我后面查查 所以网上搜了 ...

  9. char在struct中到底占几个字节!!

    struct student {char a;int c;short b;}; printf("%d\n", sizeof(struct student)); 这时char所给分配 ...

  10. utf-8编码下,一个字符最多占几个字节?

    在UTF-8编码中:一个中文等于三个字节,中文标点占三个字节. 一个英文字符等于一个字节,英文标点占一个字节. Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节.中文标点占两个 ...

最新文章

  1. c++读取文本文件里的指定位置的字符_利用FSO对象向文本文件中写入信息
  2. java 排序_Java中常见的排序算法有哪些?---选择排序
  3. VMware Workstation 与 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard 后,可以运行 VMware Workstati
  4. Python大神告诉你,学习Python应该读哪些书!
  5. linux环境变量命名规范,Linux就该这么学 -- 重要的环境变量
  6. x264中I,P,B帧和PTS,DTS的关系
  7. 调试 高通_高通平台调整通话音量
  8. softmax实现多分类算法推导及代码实现
  9. 简单 fibonacci 函数
  10. 联通发送wap push备忘录
  11. Java网上商城系统_JavaWeb源码网上商城系统
  12. 个人公众号如何运营?可以从哪些方向突破?
  13. RS-232接口标准(串口)
  14. 并发与并行,线程与进程如何理解
  15. 「石墨文档」在线协同办公系统平台免费在线办公文档兼容Office
  16. this.$utils 是什么意思是
  17. 电子综合实践_触摸小台灯
  18. 解决WIN10隔几分钟就自动黑屏睡眠的方法!
  19. python:批量改名脚本
  20. Archon.Engineering.Steam.Tables.v6.2 1CD(流体力学计算软件)

热门文章

  1. 淘宝上的零食能买吃吗?网上进口食品的秘密。
  2. 科学家量子计算机时间倒流,科学家用量子计算机让“时间倒流”?并没有真的做到...
  3. 自己拥有一台服务器可以做哪些很酷的事情
  4. QT使用AES加密解密
  5. idea生成函数 的注释快捷键_动态演示解密:Excel随机数生成函数配合F9快捷键即可实现...
  6. js实现显示系统时间的表盘
  7. nyoj248 BUYING FEED(贪心orDP)
  8. 纬度,经度和坐标系网格
  9. CCNet: Criss-Cross Attention for Semantic Segmentation论文阅读
  10. 企业组织架构的架构图用思维导图软件怎么做?