C++的跨平台方案(如何解决不带 bom 的 utf8 源文件无法用 vs 编译)

2017-11-02 21:46:59 +08:00
 zhiqiang

之前系统是在 ubuntu 下开发的,整套 gcc/make 工具链已经比较熟悉。

现在有部分功能想在 windows 下编译运行。首先考虑的是用 visual studio,但有个恶心的问题是,visual studio 要求 utf8 必须要有 bom。linux 下的 utf 源代码到 vs 下编译出现一大堆错误。

刚刚尝试了 mingw/gcc,才发现不支持多线程 mutex 之类的。在网上搜了下,说需要安装 w64 版本。但我看 w64 的 gcc 版本只有 4.8.3,而且还不确定有没有别的问题。

不知道大家是怎么弄的,我估计大多数人还是用 vs,这时候该如何处理 bom 的问题?

我想最简单的方法是 git 每次下载文件时自动加上 bom,上传文件时删掉 bom。不知道有没有现成的插件或者配置文件来做这件事情?

5136 次点击
所在节点    C
42 条回复
wwqgtxx
2017-11-02 21:51:23 +08:00
mingw64 的 gcc 都已经 7.1 了,你看的是什么古董版本
wsy2220
2017-11-02 21:53:12 +08:00
mingw-w64 已经到 gcc 7.2 了, 用 msys2 统一安装即可
coderluan
2017-11-02 21:59:36 +08:00
C++的跨平台用 Cmake 啊,vs/gcc/icc 啥的都通用。
missdeer
2017-11-02 22:00:39 +08:00
从来没关注过 BOM 的问题,一直默认就可以
justou
2017-11-02 22:12:49 +08:00
哪个版本的 VS? 我试了下 VS2015 的, 没有要求 utf8 的源文件必须要有 BOM, 它自己也可以保存为没有 BOM 的 utf8, 但是每个文件都得手动保存(有个自动保存的插件 https://vlasovstudio.com/fix-file-encoding/), 也可以一个脚本全部批量加 BOM 嘛
wwqgtxx
2017-11-03 00:23:37 +08:00
@justou 如果没有 bom 的话一旦源代码有中文就 cl 会编译错误,但是有 bom 的话,gcc 直接不认
wevsty
2017-11-03 01:02:45 +08:00
有 BOM 才是最通用的做法。
带 BOM 的 UTF-8 编码的源码文件在 GCC 上应该是不会编译错误的。不知道你用的是什么古老的版本才会出错。
lbtinglb
2017-11-03 02:04:44 +08:00
@wevsty 带 bom 的 UTF-8 官方是不推荐的
[link]( http://www.unicode.org/versions/Unicode5.0.0/ch02.pdf)
msg7086
2017-11-03 06:27:20 +08:00
$ pacman -Ss gcc
mingw32/mingw-w64-i686-gcc 7.2.0-1 (mingw-w64-i686-toolchain)
GNU Compiler Collection (C,C++,OpenMP) for MinGW-w64
mingw64/mingw-w64-x86_64-gcc 7.2.0-1 (mingw-w64-x86_64-toolchain) [installed]
GNU Compiler Collection (C,C++,OpenMP) for MinGW-w64

嗯?
snnn
2017-11-03 08:08:40 +08:00
加 bom,或者换 windows 的 codepage
zhiqiang
2017-11-03 08:29:09 +08:00
@wwqgtxx 我之前看的 http://mingw-w64.org/doku.php/download。我试试 @wsy2220 说的 msys2。这些东西比较乱。
zhiqiang
2017-11-03 08:34:02 +08:00
@wevsty 不光是 gcc。还有一些别的东西。我不想更改这个。毕竟 Linux 下才是根本,windows 上只是顺带的,不希望变动太多。
htfy96
2017-11-03 08:37:26 +08:00
记得 gcc 应该可以支持 BOM 吧,WPS 开发人员写过一篇文章 http://bbs.wps.cn/thread-22332423-1-1.html
dtgio
2017-11-03 08:38:05 +08:00
用脚本加 bom 可以吗?
yulitian888
2017-11-03 08:40:37 +08:00
不妨试试升一下 VS2017 ?
zhiqiang
2017-11-03 08:41:15 +08:00
@htfy96 这个也太复杂了,看着就头晕。。。
zhidian
2017-11-03 08:43:21 +08:00
用 cmake 生成的 VS 工程, 从来没听说过你这个问题. 在 win, linux, macOS 上都没听过, 给你一个例子: https://git.io/vFZMx
zhiqiang
2017-11-03 08:43:26 +08:00
@yulitian888 vs2017 支持不带 bom 的 utf8 吗,我搜了一下没说呢。你装了的话帮我试试,注意文件里面要有中文(可以是注释)。
zhiqiang
2017-11-03 08:44:36 +08:00
@zhidian boost 当然没问题。仅含英文的 utf8 文件当作 ansi 了。要测试的话,要用含中文的 utf8 源代码文件来测试。
yulitian888
2017-11-03 08:49:17 +08:00
@zhiqiang 我不做 c++的,所以 VS2017 里没装 c++的部分,不是很确定能不能用。不过在 VS2015 的时候,c#也出现了 BOM 问题,而之前和 2017 版都没有问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/403068

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX