Mryqu's Notes


  • 首页

  • 搜索
close

[C] GCC对UTF8 BOM的支持

时间: 2013-10-24   |   分类: Tool   C++     |   阅读: 112 字 ~1分钟

最近玩些特俗字符,结果对yqutest.cpp源码文件编译时先碰到error:converting to execution character set: Illegal bytesequence错误。GCC的源码字符集与执行字符集默认是UTF-8编码,为了避免源码文件乱码,最好也是采用UTF-8编码来存储源码文件。将源码编码转成UTF-8,问题得以解决。 但是否需要UTF-8 BOM(byte-order mark)呢? 我一时兴起添加了BOM,十六进制为EF BB BF,即对应八进制的357 273 277,编译结果如下:

mryqu> g++ yqutest.cpp -o yqutst123
yqutest.cpp:1: error: stray '\357' in program
yqutest.cpp:1: error: stray '\273' in program
yqutest.cpp:1: error: stray '\277' in program
yqutest.cpp:1: error: stray '#' in program
yqutest.cpp:1: error: expected constructor, destructor, or type conversion before '<' token
mryqu> g++ -v
Using built-in specs.
Target: amd64-undermydesk-freebsd
Configured with: FreeBSD/amd64 system compiler
Thread model: posix
gcc version 4.2.1 20070719  [FreeBSD]

折腾一下-finput-charset和-fextended-identifiers选项,不管用。

g++ -finput-charset=UTF-8 -fextended-identifiers yqutest.cpp -o yqutst123

后来看到Bug 33415 - Can’t compile .cpp file with UTF-8 BOM,才知道是我用的G++版本太低,起码GCC4.4.0才支持UTF-8 BOM。老老实实去掉BOM就可以编译过了。

参考

[C/C++] 各种C/C++编译器对UTF-8源码文件的兼容性测试(VC、GCC、BCB)
Using UTF-8 as the internal representation for strings in C and C++ with Visual Studio

标题:[C] GCC对UTF8 BOM的支持
作者:mryqu
声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!

#gcc# #utf8# #bom# #support# #compile#
[Linux] 判断可执行文件或动态库是否包含符号表
*nux下导出文件16进制内容的命令xxd
  • 文章目录
  • 站点概览

Programmer & Architect

662 日志
27 分类
1472 标签
GitHub Twitter FB Page
    • 参考
© 2009 - 2023 Mryqu's Notes
Powered by - Hugo v0.120.4
Theme by - NexT
0%