`
ideage
  • 浏览: 319002 次
社区版块
存档分类
最新评论

文件的格式和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格式.






分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics