红孩儿编辑器的模块设计10
10.1 文件保存的编码方式
在保存文件时,例如windows的记事本,会有一个编码方式的设置选项
可选的编码方式有ANSI,UTF-8,Unicode,Unicode-big-endian这四种。
默认是ANSI,它的编码方式是对于英语字符是ASCII,汉字是区位码,
也就是GB2312。这是汉字编码的1980年的国家标准。
因为无论是文本文件,还是二进制的文件,在计算机的存储设备上最终是以
二进制的方式进行存储,所以文本文件必须知道它的编码方式,才能把硬件
存储设备上的二进制的数据流解析成相应的文本形式的字符。
本系统文件保存的实现,默认采用GB2312的汉字编码,以后会考虑采用unicode编码。
在读取的文件时,增加一个配置选项,就是16进制的显示。因为在反汇编的程序分析,汇编程序调试,文本文件解析,查看图像的原始数据,协议的报文分析等场景时,需要查看16进制的数据。
不同的编码方式的文本文件的解析逻辑:
第一个问题如何确定一行的结束,即换行符是什么?
windows操作系统下的换行符是CR,LF这两个字节,即数据13,10 。
Linux操作系统下的换行符只有CR.即数据13。
第二个问题是文件头是什么?
ANSI文件没有文件头,直接解析。
UNICODE文件头为0xFF,0xFE共计两个字节,读取时需要偏移两个字节再行读取。
UTF-8文件头为0xEF,0xBB,0xBF共计三个字节,读取时需要偏移三个字节,再行
读取。