编码表理解
要理解文件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中的英文和数字还是占一个字节,从空间上来说是合理的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?