15
十二

隐匿的 BOM

最近在学习 C++ 的模板元技术,Loki 库无疑是最好的参考资料之一,至于 Loki 的介绍在这里就不多敷述了,直接说我遇到的问题:
从下面地址可以获得最新的代码:
https://loki-lib.svn.sourceforge.net/svnroot/loki-lib/trunk
把代码检出到本地,执行 make 后提示错误:
../../include/loki/StrongPtr.h:1: error: stray ‘\357’ in program
../../include/loki/StrongPtr.h:1: error: stray ‘\273’ in program
../../include/loki/StrongPtr.h:1: error: stray ‘\277’ in program
根据错误提示,应该是文件里存在非 ASCII 码的字符,用 file 命令查看了一下 StrongPtr.h 的类型,发现是 Unicode text, UTF-8,而别的源文件则是 ASCII C++ program text,看来是 Loki 的某个维护者不小心把源文件存成 UTF-8 编码的文件并在里面引入了非 ASCII 字符(UTF-8 编码是一种兼容 ASCII 编码的变长编码方案)。上述的编译错误中的字符是以 8 进制表示的,将其转换成 16 进制后发现是”EF BB BF”,看着很眼熟——好像是 BOM(byte order [...]

,