一个汉字到底占几个字节
原文地址: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编码。
一个汉字到底占几个字节相关推荐
- 在数据库中一个汉字到底占几个字节
首先要知道,一个汉字在MySQL中占几个字节是跟编码方式有关的 GBK编码:一个汉字占2个字节 UTF-8编码:一个汉字占3个字节 一般数据库设置的编码格式都是UTF-8,那就以UTF-8为例,var ...
- 一个int类型到底占多少个字节
一个int占多少个字节? 这个问题我们往往得到的答案是4. 但是int到底占多少个字节,却跟你的机器环境有关. As you can see, the typical data type sizes ...
- 一个int类型到底占多少个字节?
一个int占多少个字节? 这个问题我们往往得到的答案是4. 但是int到底占多少个字节,却跟你的机器环境有关. [html] view plaincopy print? As you can see, ...
- 一个汉字真的由两个字节存放吗?
偶尔间发现了一个程序,让我想起了一个问题:一个汉字真的由两个字节存放吗? 先看一个程序段: //文件名字为test.c #include #include #include int main(int ...
- java中汉字究竟占几个字节?
byte是1个字节,char是两个字节,但是char里可以存一个汉字,这么说汉字就占用两个字节?String类型里的汉字,按照编码格式的不同,分为2-4个字节的占用,UTF-8占用3个字节,特别的占用 ...
- 一个指针变量到底占几个字节
int main() {char ch = 'A';int i = 99;double x = 66.6;char *p = &ch;int *q = &i;double *r = & ...
- 一个中文字符占几个字节_字节与字符的关系
简介 字节(Byte)是计量单位,表示数据量多少,二进制数据,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位.通常在读取图片.声音.可执行文件需要用字节数组来保存文件,在下载 ...
- java中char到底占几个字节的问题
前些天被问到一个问题:java中一个char可以表示一个汉字吗? 我一想char不是占一个字节吗?汉字在utf-8中占三个字节(还有四字节的),char不能够表示!对方一笑,让我后面查查 所以网上搜了 ...
- char在struct中到底占几个字节!!
struct student {char a;int c;short b;}; printf("%d\n", sizeof(struct student)); 这时char所给分配 ...
- utf-8编码下,一个字符最多占几个字节?
在UTF-8编码中:一个中文等于三个字节,中文标点占三个字节. 一个英文字符等于一个字节,英文标点占一个字节. Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节.中文标点占两个 ...
最新文章
- Using SSL Certificates with HAProxy--reference
- MR21批量修改价格
- 09_EGIT插件的安装,Eclipse中克隆(clone),commit,push,pull操作演示
- Linux ping的原理与实现
- Active Directory系列之二:部署第一个域
- 在CentOS下面编译WizNote Qt Project
- type=button 字体大一点_机械制图中文字用什么字体?你所在的企业图纸中文字又是什么字体...
- logit回归模型假设_logistic回归模型分析
- C语言初学必练100道
- “矢量网络分析仪”检测同轴电缆的驻波比(SWR)
- gatk过滤_GATK使用方法详解(变异检测)
- python的编码解码是什么意思_python - 这是什么编码,如何解码
- 数据挖掘项目(一)Airbnb 新用户的民宿预定结果预测
- jersey tomcat MySQL_基于jersey和Apache Tomcat构建Restful Web服务(一)
- uniapp ios端云打包失败,求助
- iOS开发之3D Touch(快速添加3D Touch功能)
- 科技战疫,多家科技企业IT工程师驻地武汉驰援
- 股票MACD指标算法公式
- matlab滞环比较控制器,滞环比较跟踪控制技术
- Idea启动jar包冲突 解决