用VS编写代码时,从word文档中拷贝了一些内容作为注释。编完代码,转到linux上编译时,结果出现了下面一段有点让人丈二和尚摸不到头脑的编译错误:

  • xxUnit.cpp:1: error: stray ‘\357’ in program
  • xxUnit.cpp:1: error: stray ‘\273’ in program
  • xxUnit.cpp:1: error: stray ‘\277’ in program

具体如下图所示:

Cache_20c6195f8a3b0493.

图1

这可以排除是语法错误引起的。因为语法错误,编译器会提示哪一行出错了。

查明真相

实际上,这个编译错误是由于文件格式引起的。我估计应该是从word拷贝内容到源文件作为注释时引起的。

使用NotePad++打开源文件,发现是UTF-8格式,如下图所示。

Cache_-581d355135b23fcd.

图2

UTF-8 编码是一种兼容 ASCII 编码的变长编码方案。

但要注意的是,大多数 Windows 文件编辑器(包括记事本)在将文件保存为 Unicode 编码时,会在文件开始的地方插入三个隐藏的字符(0xEF 0xBB 0xBF),即BOM字符(Byte Order Mark,字节顺序标记),用于标识文件是采用哪种格式的编码。

Cache_3bd3d1610c4a53d2.

图3

Windows 使用三个隐藏的BOM字符来标记文本文件的编码方式,用于让记事本等编辑器识别这个文件是否以UTF-8编码。对于一般的文件,这样并不会产生什么麻烦。但关键的问题是,linux中没有这个规矩,它不认识这三个BOM字符。

UTF-8编码文件的BOM字符:0xEF 0xBB 0xBF,对应8进制数,正好是357、273、277。也就是说,上述编译错误中的字符是以 8 进制表示的。这个编译错误,提示的确实有点隐晦。

解决方法

解决此编译错误之方法为:把UTF-8编码文件改为ASCII 编码的文件。

用NotePad++打开源文件,如图2所示,在格式菜单中,选择“转为ANSI编码格式”,然后保存即可。

» 文章出处: reille博客—http://velep.com , 如果没有特别声明,文章均为reille博客原创作品
» 郑重声明: 原创作品未经允许不得转载,如需转载请联系reille#qq.com(#换成@)
分享到:

 Leave a Reply

(必须)

(我会替您保密的)(必须)

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.

   
© 2012 velep.com | reille blog | 管理| 粤ICP备15065318号-2| 谷歌地图| 百度地图| Suffusion theme|Sayontan Sinha

无觅相关文章插件,快速提升流量