今天帮同事调个东西,发现他的一个配置文件(文本文件)不能正确的被我的程序解析,对比了一个可用的配置文件之后,也没发现什么特别大的差异,只是配置项的值不同。
但是我用beyond compare对比之后却发现两个重要的不同点:
首先假设他的文件叫做win_config.txt,可用的配置文件叫valid_config.txt。
1.win.txt的行尾结束符是0D 0A两个字符,也就是ascii码的\r \n,
而valid.txt的行尾结束符是0A一个字符,也就是ascii码的\n。
2.win.txt的字符编码格式是UTF-8的,valid.txt的字符编码格式是ANSI的。
使用notepad++这个软件,把win.txt的行结束符转换成UNIX格式的,也就是\n,再尝试,就可以被我的程序给解析了。
跟ANSI和UTF-8编码到没什么关系。
后来为了理解这是为什么,查了一些资料,总结一下。
在三大OS下,其环境下的行结束符是如下所示,所以当Unix OS的文本文档用Win OS来读取时,就会发生问题,所有的文字都在同一行。
OS :十六进制 -> ascii码 -> 简称 -> 全称/中文名称
Mac OS:0D -> \r -> CR -> Carriage Return / 回车(符)
Unix OS:0A -> \n -> LF -> Line Feed / 换行(符)
Win OS:0D 0A -> \r\n -> CR LF