中文汉字占用字节长度

  • 一、字符集和字符编码
    • 1、概念
    • 2、英文字母和中文汉字在不同字符集编码下的字节数
  • 二、环境对应的字符编码
    • 1、Ubuntu16.04虚拟机
    • 2、Notepad++
  • 三、sizeof运算汉字占用字节长度
  • 参考

一、字符集和字符编码

1、概念

  • 字符集(Charset):是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。

  • 字符编码(Character Encoding):是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对。即在符号集合与数字系统之间建立对应关系,它是信息处理的一项基本技术。通常人们用符号集合(一般情况下就是文字)来表达信息。而以计算机为基础的信息处理系统则是利用元件(硬件)不同状态的组合来存储和处理信息的。元件不同状态的组合能代表数字系统的数字,因此字符编码就是将符号转换为计算机可以接受的数字系统的数,称为数字代码。

2、英文字母和中文汉字在不同字符集编码下的字节数

  • 英文字母
字节数 : 1;编码:GB2312
字节数 : 1;编码:GBK
字节数 : 1;编码:GB18030
字节数 : 1;编码:ISO-8859-1
字节数 : 1;编码:UTF-8
字节数 : 4;编码:UTF-16
字节数 : 2;编码:UTF-16BE
字节数 : 2;编码:UTF-16LE
  • 中文汉字
字节数 : 2;编码:GB2312
字节数 : 2;编码:GBK
字节数 : 2;编码:GB18030
字节数 : 1;编码:ISO-8859-1
字节数 : 3;编码:UTF-8
字节数 : 4;编码:UTF-16
字节数 : 2;编码:UTF-16BE
字节数 : 2;编码:UTF-16LE

历史发展

(1)美国人首先对其英文字符进行了编码,也就是最早的ascii码,用一个字节的低7位来表示英文的128个字符,高1位统一为0;

(2)后来欧洲人发现尼玛你这128位哪够用,比如我高贵的法国人字母上面的还有注音符,这个怎么区分,得,把高1位编进来吧,这样欧洲普遍使用一个全字节进行编码,最多可表示256位。欧美人就是喜欢直来直去,字符少,编码用得位数少;

(3)但是即使位数少,不同国家地区用不同的字符编码,虽然0–127表示的符号是一样的,但是128–255这一段的解释完全乱套了,即使2进制完全一样,表示的字符完全不一样,比如135在法语,希伯来语,俄语编码中完全是不同的符号;

(4)更麻烦的是,尼玛这电脑高科技传到中国后,中国人发现我们有10万多个汉字,你们欧美这256字塞牙缝都不够。于是就发明了GB2312这些汉字编码,典型的用2个字节来表示绝大部分的常用汉字,最多可以表示65536个汉字字符,这样就不难理解有些汉字你在新华字典里查得到,但是电脑上如果不处理一下你是显示不出来的了吧。

(5)这下各用各的字符集编码,这世界咋统一?俄国人发封email给中国人,两边字符集编码不同,尼玛显示都是乱码啊。为了统一,于是就发明了unicode,将世界上所有的符号都纳入其中,每一个符号都给予一个独一无二的编码,现在unicode可以容纳100多万个符号,每个符号的编码都不一样,这下可统一了,所有语言都可以互通,一个网页页面里可以同时显示各国文字。

(6)然而,unicode虽然统一了全世界字符的二进制编码,但没有规定如何存储啊,亲。x86和amd体系结构的电脑小端序和大端序都分不清,别提计算机如何识别到底是unicode还是acsii了。如果Unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,文本文件的大小会因此大出二三倍,这对于存储来说是极大的浪费。这样导致一个后果:出现了Unicode的多种存储方式。

(7)互联网的兴起,网页上要显示各种字符,必须统一啊,亲。utf-8就是Unicode最重要的实现方式之一。另外还有utf-16、utf-32等。UTF-8不是固定字长编码的,而是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。这是种比较巧妙的设计,如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。

(8)注意unicode的字符编码和utf-8的存储编码表示是不同的,例如”严”字的Unicode码是4E25,UTF-8编码是E4B8A5,这个7里面解释了的,UTF-8编码不仅考虑了编码,还考虑了存储,E4B8A5是在存储识别编码的基础上塞进了4E25。

(9)UTF-8 使用一至四个字节为每个字符编码。128 个 ASCII 字符(Unicode 范围由 U+0000 至 U+007F)只需一个字节,带有变音符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及马尔代夫语(Unicode 范围由 U+0080 至 U+07FF)需要二个字节,其他基本多文种平面(BMP)中的字符(CJK属于此类-Qieqie注)使用三个字节,其他 Unicode 辅助平面的字符使用四字节编码。

(10)最后,要回答你的问题,常规来看,中文汉字在utf-8中到底占几个字节,一般是3个字节,最常见的编码方式是1110xxxx 10xxxxxx 10xxxxxx。

二、环境对应的字符编码

1、Ubuntu16.04虚拟机

2、Notepad++

三、sizeof运算汉字占用字节长度

参考

1、字符集–baike
2、字符编码–baike
3、字符编码–wiki
4、字符集和字符编码(Charset & Encoding)
5、中文汉字占二个字节还是三个字节长度
6、vim编译器(5):编码、字符格式

C--中文汉字占用字节长度(字符集和字符编码)相关推荐

  1. Oracle一个中文汉字占用几个字节

    Oracle 一个中文汉字 占用几个字节,要根据Oracle中字符集编码决定   查看oracle server端字符集 select userenv('language') from dual; 如 ...

  2. oracle中文占3,Oracle一个中文汉字占用几个字节

    Oracle一个中文汉字占用几个字节,要根据Oracle中字符集编码决定. --查看oracle server端字符集 select userenv('language') from dual; -- ...

  3. 英文字母和汉字的字节长度问题

    英文字母和中文汉字在不同字符集编码下的字节数 英文字母: 字节数 : 1;编码:GB2312 字节数 : 1;编码:GBK 字节数 : 1;编码:GB18030 字节数 : 1;编码:ISO-8859 ...

  4. 字符集和字符编码(附c语言判断utf8编码)

    1.基础知识 1.1.字符集 字符(Character)是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等.  字符集(Character set)是多个字符的集合,字符集种类较多,每 ...

  5. 关于字符集和字符编码自己汇总记录

    第零篇 第一篇 第二篇 第三篇 第四篇:关于"unicode字符是2个字节"这句话的讨论 关于Unicode的中文百科  https://zh.wikipedia.org/wiki ...

  6. 13、字符集和字符编码

    字符集:字符集是多个字符的集合,常见字符集有:ASCII字符集.GB2312字符集.GB18030字符集.Unicode字符集等. ASCII字符集:是英文大小写字符.阿拉伯数字和西文符号的一个集合. ...

  7. 字符集和字符编码(Charset Encoding)

    字符集和字符编码 一文参透字符编码的难题! 引子 在 python 中,处理字符串是常见任务,因为字符串编码问题,经常出现字符串乱码. 在 matplotlib 绘图时,text对象,如 axes_t ...

  8. 谈谈字符集和字符编码

    http://tommwq.tech/blog/2020/11/20/232 1 字符集和字符编码 字符集(charset)和字符编码(character encoding)是两个含义相近的概念.在历 ...

  9. 字符集和字符编码的类别与区分详解

    目录 1. 字符集和字符编码 编码和解码 字节和字符 字符集和字符编码 2. ASCII 3. GB2312.GBK.GB18030和Big5 GB2312 GBK GB18030 Big5 4. U ...

最新文章

  1. MySQL百万级、千万级数据多表关联SQL语句调优
  2. idle和python区别_Python的IDLE与命令lin的区别
  3. Ruby种的特殊变量
  4. .NET自定义多文件(图片)上传的实现方式
  5. Redis集群(一):集群搭建
  6. Windows Phone 7 定义和使用字典资源(ResourceDictionary)
  7. 求两条轨迹间的hausdorff距离_干货 | 轨迹方程问题?两招咔嚓!
  8. Linux 任务计划、周期性任务计划
  9. Android添加受保护广播
  10. 三星android智能手机usb驱动程序,三星智能手机USB驱动
  11. Ios html5游戏存档,ios存档怎么安装 不用电脑安装IOS存档图文教程
  12. Java之自定义异常类、常用类String、StringBuilder、StringBuffer、时间类和枚举类的学习
  13. itunes备份文件的位置在哪
  14. GPS北斗卫星时钟同步系统的原理和技术
  15. python 捕捉键盘操作
  16. 重磅 | Hinton、LeCun、Bengio联合署名深度学习综述,《Nature》纪念人工智能60周年专题...
  17. [JZOJ5594][min25筛]最大真因数
  18. Docker容器离线安装字体(宋体)
  19. python实现面向对象(1)
  20. QQ技术全攻略(原来简单的QQ,还隐藏着这么多秘密!)

热门文章

  1. 电脑象棋循序渐进(三):让电脑掌握象棋规则
  2. 盛元广通P3实验室管理系统
  3. qt for Android点击edit输入框,弹出系统默认输入法数字键盘界面
  4. C#-asp.net服装销售系统毕业设计(附源码、运行环境)
  5. 过云锁php大马,华夏名网某分站弱口令可Getshell(过云锁waf案例)
  6. hdu 4337——poj 2438(哈密尔顿回路求解模板)
  7. MATLAB地图工具箱学习心得(二)设计可变参数和位置拾取的“放大镜”式投影程序
  8. 易康(eCognition)
  9. php x7f,这个正则中的x7f-xff是什么意思
  10. 数据泄露怎么办?华生·K7招消灭安全威胁