原文地址: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. Using SSL Certificates with HAProxy--reference
  2. MR21批量修改价格
  3. 09_EGIT插件的安装,Eclipse中克隆(clone),commit,push,pull操作演示
  4. Linux ping的原理与实现
  5. Active Directory系列之二:部署第一个域
  6. 在CentOS下面编译WizNote Qt Project
  7. type=button 字体大一点_机械制图中文字用什么字体?你所在的企业图纸中文字又是什么字体...
  8. logit回归模型假设_logistic回归模型分析
  9. C语言初学必练100道
  10. “矢量网络分析仪”检测同轴电缆的驻波比(SWR)
  11. gatk过滤_GATK使用方法详解(变异检测)
  12. python的编码解码是什么意思_python - 这是什么编码,如何解码
  13. 数据挖掘项目(一)Airbnb 新用户的民宿预定结果预测
  14. jersey tomcat MySQL_基于jersey和Apache Tomcat构建Restful Web服务(一)
  15. uniapp ios端云打包失败,求助
  16. iOS开发之3D Touch(快速添加3D Touch功能)
  17. 科技战疫,多家科技企业IT工程师驻地武汉驰援
  18. 股票MACD指标算法公式
  19. matlab滞环比较控制器,滞环比较跟踪控制技术
  20. Idea启动jar包冲突 解决

热门文章

  1. 《逆袭进大厂》第十三弹之Redis重点篇
  2. 浪潮存储助力方特动漫为《熊出没-狂野大陆》动物角色披上“动感毛发”
  3. Android版本控制软件之SVN
  4. 企业盈利能力五大指标之:净利率
  5. 一个事物两个方面的对比举例_写compare contrast essay如何对比两个事物/人物
  6. 多节点服务器定时任务重复处理的问题
  7. 转载:凯明事件背后:TD的煎熬
  8. 请相信一个绝地反击的故事
  9. 11中常见的句法成分
  10. 恢复grub 修复分区表