首页 > 其他分享 >字符编码

字符编码

时间:2022-10-10 14:01:41浏览次数:55  
标签:编码 字节 字符 xxxxxxxx 码表 解码 所以 ASCII

计算机是由美国人发明的,所以美国人要把他们使用的语言字符告诉计算机,由计算机进行存储,他们将使用的小写字母、大写字母、符号、数字进行边编排,每个对应一个数字,
我们叫一个码点,从数字0开始,由于只有128个,所以码点就由0到127,这就是著名的ASCII码。由于0-127很小,所以一个字节存储足以。这就是为什么a对应的是97等等。。。

但是由于计算机的发展,我们中国也使用计算机,可是ASCII码表上就没有我们中国汉字,这可怎么办呢?所以我们也设计了一套适用中国的编码字符集,也就是我们常见的GBK。
由于汉字量大,所以在设计的时候用两个字节去存储,同时GBK也是兼容ASCII,所以字母数字符号等还是一个字节存储,这个时候就有问题出现了?如果出现了字母加汉字呢?这个时候怎么解码?
例如:n啥n
因为一个字节是8位 即 xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
n 啥 n
但是英文字母数字等只有0-127 所以规定一个字节首位都是0 汉字首位是1,所以上面可以是0xxxxxxx 1xxxxxxx xxxxxxxx 0xxxxxxx
n 啥 n
所以解码按照这个规则去解码也就不会出现问题了!
但是新的问题又出现了,世界那么多国家呢?都弄一套自己的码表吗?显然不会?

所以出现了统一的码表,一开始是UTF-32,这个码表规定是每个字符占4个字节,这显然也不合理,因为太浪费了!
所以又出现了UTF-8,这个码表规定是每个字符动态占用一个字节、两个字节、三个字节、四个字节,即有的占用一个字节,有的占用多个字节,最多四个字节,例如英文字母还是占用一个字节,
汉字占用三个字节!
这个时候小伙伴又要问,那我n啥n怎么解码呢?
其实编码的时候也对应了一个规则,即一个字节的首位是0,两个字节的首字节必须是110开头的,剩下字节是10开头的,三个字节首字节是1110,剩下的字节是10开头,四个字节首字节是11110开头,
剩下字节是10开头,只要按照这个规则解码也就可以了。

大部分码表都兼容了ASCII码,但是如果中文用GBK编码,用UTF8解码就会乱码!

标签:编码,字节,字符,xxxxxxxx,码表,解码,所以,ASCII
From: https://www.cnblogs.com/tyc123/p/16775472.html

相关文章

  • javascript parse date string - js 字符串转日期
    一、日期数字newDate().getTime()//1665370859678数字表示从UTC+0时区的1970年1月1日0时0分0秒开始的那一刻起,所经过的毫秒数。无论是在北京还是伦敦,此时此刻,无论......
  • .NET 6配置EF Core数据库链接字符串
    appsetting.json{"Logging":{"LogLevel":{"Default":"Information","Microsoft.AspNetCore":"Warning"}},"AllowedHosts":"*",......
  • PHP 字符串星号替换
    functionxmsb_str2safe($str,$start,$length=0,$key='*'){//通过$length的值来判断是否传入mb_substr函数的第三个参数$len$param=$length?[$st......
  • 找到字符串中所有字母异位词
    LeetCode75学习计划适用于想为技术面试做准备但不确定应该聚焦于哪些题目的用户。学习计划中的题目都是经过精心挑选的,Level1和Level2学习计划是为初级用户和中级用户......
  • 04@ 元字符
    文章目录​​元字符​​​​一、算数运算符​​​​1、算数运算符需要配合下述操作使用​​​​2、算数运算详解​​​​二、使用测试练习​​​​三、测试运算符​​​​1......
  • crondtab定时任务%字符无法识别的处理
    一、背景1.使用crond的定时任务时,编辑了以下的语句,每天0点执行定时任务crontab-eservicecrondrestart00***sh/root/backup/compress_backup.sh2>&1>/roo......
  • 一本通字符串 哈希 KMP
    [BalticOI2014Day1ThreeFriends]P6739点击查看代码#include<stdio.h>#include<string.h>typedefunsignedlonglongULL;constintN=2e6+5;intn,m;c......
  • 777. 在LR字符串中交换相邻字符
    777.在LR字符串中交换相邻字符在一个由'L','R'和'X'三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作。一次移动操作指用一个"LX"替换一个"XL",或者用一个"XR......
  • C++ 实现一个函数,使用指针连接两个字符串。 函数输入: 两个源字符串的指针,目的字符串
    #include<iostream>#include<string>#include<windows.h>usingnamespacestd;boolstr_cat(char*dest,intlen,constchar*st1,constchar*st2){int......
  • 《新概念字符串哈希》
    题目地址大意给你\(2*N\)个字符串集合,每个集合有\(L\)个长度为4的字符串片段,这些片段满足只有最多不超过\(M\)种,现告诉你里面有正好\(N\)对不互相同的集合,使得这一对内满......