VS中无签名UTF8和带签名UTF8格式

在VS中,使用高级保存选项功能的时候,我们将会发现UTF8有两种格式,一个是带签名的UTF8,一个是无签名的UTF8。

那么这两种的格式有什么区别呢?

带签名的UTF8:

带签名的UTF8,是在生成的文件中,在文件的开头使用UTF8标志,这样在下次使用编辑器编辑的时候,编辑器能准确的识别当前文件的编码格式,并做正确的解码。

无签名的UTF8:

相反,无签名的UTF8是在保存的时候,不再文件头部写入文件的编码格式。

那么文件编码需要消耗多少空间呢? —— 答案是3个字节。

因此,在一般使用过程中,我们建议使用带签名的UTF8格式来保存文件。在硬盘如此廉价的今天,你不会省这3个字节吧?

=====================分割线=========================

补图:

vs下面设置utf-8 bom

=====================分割线=========================

再次补充,关于BOM的处理,此文还是有些欠考虑,但是只是非常简单的想处理掉手中出现的问题,并记录解决方案。这里谢谢choury的严谨提醒。

  BOM(BYTE ORDER MARK)只是文件的一个可选项,有很多软件并未提供对BOM的支持,因此此类软件如果打开含有BOM数据的文件时,会将此数据作为数据内容本身进行处理。如果在程序中,可能会作为程序内容来解析,这样有些程序在迁移的时候就会出现问题。在涉及到程序多处多平台迁移的时候,一般建议慎重考虑是否启用带签名的UTF8 格式。那么如何确定自己的文件UTF-8格式是带BOM的呢?

  最简单的方法就是用二进制查看文件,看文件起始是否是EF BB BF;其次,也可以用DW看看是否是包含签名BOM的。

  如果你不想使用带签名BOM格式的UTF8文件格式保存文件,你可以将文件在二进制下用可见字符替换掉起始的三个字节,而后在普通的文本编辑中删除该可见字符即可。 —— UltraEdit32 可以试试,如果你没有更好的工具的话。

 

Saturday, April 21, 2012 | 其他技术

文章评论

  • # re: VS中无签名UTF8和带签名UTF8格式
    如果你只是在windows下面编码那么这样做没有问题,但是一旦你打算移植你的代码你就发现事情没这么简单了
  • # re: VS中无签名UTF8和带签名UTF8格式
    是的,在UTF-8中使用EF BB BF三个字节BOM是微软私下的处理方式,在其他有些情况下会直接将这三个字节内容作为数据处理,造成程序的异常。在带与不带BOM(Byte Order Mark)的问题上,还需要更多的考虑。

发表评论

Please add 7 and 1 and type the answer here:

关于博主

  一枚成分复杂的网络IT分子,属于互联网行业分类中的杂牌军。