首先纠正一个错误,fopen和_wfopen的编码开关有ccs=UNICODE、ccs=UTF-8、ccs=UTF-16LE(不是ccs=UTF-16)。
再纠正一个错误,当ccs开关为ccs=UTF-8、ccs=UTF-16情况下只是无BOM时默认值不同而已,具体情况如下表:
Visual Studio 2005/2008:
ccs=UNICODE——(无BOM或新文件)ANSI——(EF BB BF)UTF-8——(FF FE)UTF-16LE
ccs=UTF-8——(无BOM或新文件)UTF-8——(EF BB BF)UTF-8——(FF FE)UTF-16LE
ccs=UTF-16LE——(无BOM或新文件)UTF-16LE——(EF BB BF)UTF-8——(FF FE)UTF-16LE
Visual Studio 2010以上的版本的MSDN中的说法:
ccs=UNICODE——(无BOM或新文件)UTF-16LE——(EF BB BF)UTF-8——(FF FE)UTF-16LE
ccs=UTF-8——(无BOM或新文件)UTF-8——(EF BB BF)UTF-8——(FF FE)UTF-16LE
ccs=UTF-16LE——(无BOM或新文件)UTF-16LE——(EF BB BF)UTF-8——(FF FE)UTF-16LE
实际上经我测试,Visual Studio 2010以上版本中,ccs=UNICODE时,默认还是ANSI,即对应关系并没有变化。
所有选项都能自动识别带BOM的文件,只是无BOM时的默认值各有不同。所以大家喜欢用什么用什么就行了。