编码表理解
2018-06-18 03:05:02来源:未知 阅读 ()
要理解文件IO操作,我认为要先从编码来理解。计算机中所有文件都是以二进制形式存储的,计算机底层只认识高低电位1和0。 8位(bit)为1字节(byte),1024字节为1kb。反正以前学电路数电模电,都是0101,大概都是一个意思吧。
曾见过一些错误的说法表示,将文件转换为二进制存储以达到节约空间的目的,至今也不能理解这句话的依据何在,文件本身就是二进制还转什么二进制,即使根据编码表,将文本转换成可见的二进制数字再进行存储,那也是大大增加了存储中间,比如将1 按照ASCII编码成二进制,那也是00000001,把它以ASCII编码方式存入文本中也是增加了8倍空间。
也见过有人问汉字占几个字符,占几个字符是由如何编码决定的。如果我定义一个编码表,并且读取和存储文档都按照我的编码表实现,我可以把00000001定义为博,00000002定义为客。那这两个汉字就占一个字节嘛。按照人家unicode规范就是占2个字节,utf-8就是占3字节。
纯英文,英文符号以及数字等使用128个码就足矣了,使用7位可以表示0-127, 为了凑足8位,所以在首部补0,这就是ASCII码。所以我们看到:
a字母 二进制0110 0001 十进制97
A字母 二进制0100 0001 十进制65
因为ASCII不足以表示我们这么多汉字字符和其他国家的字符。所以需要更加健全的字符集。 对我们平时比较重要的应当属于GBK编码,Unicode字符集和utf-8编码规则。
unicode和utf-8的关系 实际上就是 当前准备好了一个unicode字符集,而utf-8是该集合字符的一种编码规则/实现方式,给每一个字符都规定好唯一编号。
我们在C#或者Java写字符串的时候,需要先转换String的bytes[] 曾经很不理解 字节数组是啥?里面的数字代表什么? 其实里面的数字就是给我们展现 底层所存储的二进制值转换为10进制的数字而已。
相对于unicode,utf-8的优点在于其汉字一般在3个字节,而ASCII中的英文和数字还是占一个字节,从空间上来说是合理的。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 透彻理解C++11新特性:右值引用、std::move、std::forward 2020-04-30
- C语言数组指针的理解方式 2020-03-31
- C++ this指针理解 2020-03-19
- C++ 中的new和delete理解与实操应用 2020-03-19
- C++ this指针的理解和作用 2019-11-28
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash