文件的格式和BOM

最近,用D写了些文件操作的代码.发现,只能用UltraEdit编辑的文件,才能在std.file中正常使用.如果使用记事本,编辑下,就立刻无法打开了.而这两者有什么不同呢? 并且,前几天,保存一共文件的时候,发现std.file总要在文件的开头加入写不能识别的字符. 这两件事情一联系,感觉到在std.file后隐藏的东西还有很多.


分析了一下文件的二进制格式,发现了问题:

Unicode总会在开头加入FF FE或者是FF FE FF FE, ANSI文件呢:什么也没有.记事本默认的文件就是ANSI格式的.这也是记事本文件,在std.file中打开不正常的原因了.

这就是所谓的BOM问题了.

UTF-8 编码的文件可以分为无 BOM 和 BOM 两种格式。BOM:即 Byte Order Mark .是为了方便编辑器识别文件的一个简单方法,在识别UTF16,UTF32文件都要使用.而UTF8则是可有可无.


再看看std.file,std.stream,这里完全支持多种BOM格式.如此,就好办了,在每次读取文件时,判断是有正确的BOM,有就按BOM指定的格式进行读取每个字符.



总结下:

1.使用EndianStream,读取BOM,来对UTF格式读取.

2.使用任何编辑器,都在保存中文文件时,使用UTF8格式,甚至,仅仅使用UTF8格式.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值