当前位置: 首页 > news >正文

字符编码相关的知识

1)字节和字符的区别

●字节和字符能有什么区别啊?不都是一样的吗?完全正确,但只是在古老的DOS时代。当Unicode出现后,字节和字符就不一样了。
●字节(octet)是一个八位的存储单元,取值范围一定是0~255。
●字符(character,或者word)为语言意义上的符号,范围就不一定了。例如在UCS-2中定义的字符范围为0~65535,它的一个字符占用两个字节。
 
2)大端和小端的问题
●字符0xabcd,在计算机中,它的存储格式到底是 AB CD,还是 CD AB 呢?
●如果存储为 AB CD,则称为Big Endian 。
●如果存储为 CD AB,则称为Little Endian。
 
3)unicode是什么
●Unicode的学名叫“Universal Multiple-Octer Coded Character Set”。
●Unicode是一种编码方式。
●任何文字在Unicode中都对应一个值,这个值称为代码点(code point)。
 
4)UCS是什么
●文字和代码点之间的对应关系就是UCS-2(Universal Character Set coded in 2 octets)。
●UCS-2是用两个字节来表示代码点,其取值范围为 U+0000~U+FFFF。
●UCS-4,即用四个字节表示代码点。它的范围为 U+00000000~U+7FFFFFFF,其中 U+00000000~U+0000FFFF和UCS-2是一样的
 
5)UTF是什么
●UCS-2和UCS-4只规定了代码点和文字之间的对应关系,并没有规定代码点在计算机中如何存储。
●规定存储方式的称为UTF(Unicode Transformation Format),其中应用较多的就是UTF-16和UTF-8了。
 
6)BOM是什么
●字节顺序记号(英:byte-order mark,BOM)是位于码点 U+FEFF 的统一码字符(“零宽度无断空白”)。当以 UTF-16 或 UTF-32 来将UCS/统一码字符所组成的字串编码时,这个字符被用来标示其字节序。它常被用来当做标示文件是以 UTF-8 、 UTF-16 或 UTF-32 编码的记号。
●不同编码的字节顺序记号的表示

  编码                              表示 (十六进制)

  UTF-8                           EF BB BF

  UTF-16(Big Endian)       FE FF

  UTF-16(Little Endian)    FF FE

  UTF-32(Big Endian)       00 00 FE FF 

  UTF-32(Little Endian)     FF FE 00 00
 
7)UTF-16
●UTF-16由RFC2781规定,它使用两个字节来表示一个代码点。
●UTF-16是完全对应于UCS-2的,即把UCS-2规定的代码点通过Big Endian或Little Endian方式直接保存下来。
●UTF-16包括三种:UTF-16,UTF-16BE(Big Endian),UTF-16LE(Little Endian)。
●比如说char 'a', ascii为0x61
        UTF-16BE表示: 0x00, 0x61
        UTF-16LE表示: 0x61, 0x00
而UTF-16就需要通过在文件开头以名为BOM(Byte Order Mark)的字符来表明文件是Big Endian还是Little Endian。
 
8)UTF-32
●UTF-32用四个字节表示代码点,这样就可以完全表示UCS-4的所有代码点,而无需像UTF-16那样使用复杂的算法。
●与UTF-16类似,UTF-32也包括UTF-32、UTF-32BE、UTF-32LE三种编码,UTF-32也同样需要BOM字符。
 
9)UTF-8
●UTF-16和UTF-32的一个缺点 :固定使用两个或四个字节,这样在表示纯ASCII文件时会有很多00字节,造成浪费。
●UTF-8用1~4个字节来表示代码点。
●从表中可以看出,单字节编码的第一字节为[00-7F],双字节编码的第一字节为[C2-DF],三字节编码的第一字节为[E0-EF]。这样只要看到第一个字节的范围就可以知道编码的字节数。
 
 
 

转载于:https://www.cnblogs.com/honglihua8688/p/3681260.html

相关文章:

  • 远程读取XML根级别上的数据无效。 行 1,位置 1
  • 将DATAtable转换成 json格式
  • PHP之session相关实例教程与经典代码
  • HDU 3065 病毒侵袭持续中 (AC自动机)
  • HDU 1850 Being a Good Boy in Spring Festival (Nim博弈)
  • 20非常有用的Java程序片段(6-10)
  • BizTalk RosettaNet解决方案之Loopback
  • YAFFS2文件系统分析(转)
  • 如何设置Linux操作系统shell命令的默认语言
  • 基于HTML5的燃气3D培训仿真系统
  • Android 解决ScrollView嵌入ListView | GridView | ScrollView显示问题
  • 万能写入sql语句,并且防注入
  • 进程通信
  • Delphi控制Excel
  • Tigase XMPP Server源码部署
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • ECS应用管理最佳实践
  • jquery ajax学习笔记
  • Lucene解析 - 基本概念
  • nodejs调试方法
  • PAT A1092
  • 不上全站https的网站你们就等着被恶心死吧
  • 构建二叉树进行数值数组的去重及优化
  • 好的网址,关于.net 4.0 ,vs 2010
  • 计算机在识别图像时“看到”了什么?
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 如何在 Tornado 中实现 Middleware
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • Prometheus VS InfluxDB
  • 说说我为什么看好Spring Cloud Alibaba
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (C++17) std算法之执行策略 execution
  • (zhuan) 一些RL的文献(及笔记)
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (转)用.Net的File控件上传文件的解决方案
  • (转载)虚函数剖析
  • .net 4.0发布后不能正常显示图片问题
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .net refrector
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET 使用配置文件
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • @Data注解的作用
  • [Angular] 笔记 7:模块
  • [ARM]ldr 和 adr 伪指令的区别
  • [BeginCTF]真龙之力
  • [C++]指针与结构体
  • [CareerCup] 2.1 Remove Duplicates from Unsorted List 移除无序链表中的重复项
  • [Kubernetes]9. K8s ingress讲解借助ingress配置http,https访问k8s集群应用