技术解析

Win、Linux 平台下的源程序文件编码格式问题
0
2021-07-06 10:05:06
idczone
目前写的 C/C++源程序都是在 linux 下编辑、编译链接的,源文件(有中文字符)都是 UTF-8 编码。

但是这些源代码同时需要给别人在 Windows 的 VS2010 和 VS2013 中使用(平台相关代码已在源程序中做了条件控制),但是 VS 2010 的编译器根本不认 UTF-8 编码,网上看了一圈也一头雾水,请问有没有有经验的同仁给出一个解决方案啊,实在不想一个一个格式去实验验证了
全部加上 BOM 头试试。


正解,虽然一个很恶心的办法(违背了“文本文件”的定义)。
GCC 现在也认带 BOM 的文件了。

写 PHP 的时候被坑得不轻,拿去编译的问题应该不大。
如果用 Git 也能避免编码问题。

部分源码管理工具可以设置在签出的时候转换成本地格式。比如 Git





谢谢,看来只能 UTF-8 with BOM 了,只要 gcc/g++认识和 cl/link 认识就行
看来一下子 http://www.cnblogs.com/findumars/p/3620078.html ,只是很纠结!

不做网页有 BOM 问题也不大。建议用 Git 。

老版本的 GCC 还是不认识的,前几天还专门为此问题转换过源代码

我最近才发现,跨平台下系统 API 和 C/C++函数库反而容易解决,而一个源程序编码搞得特别纠结!
准备用 Python 写一个程序来自动转编码,还得先去学习编码格式的东西,把 UTF-8 自动转换为 UTF-8 with BOM ,否则一个一个转换太烦人了

其实你都不需要写 py 呢……
```Bash
shopt -s globstar nullglob
for i in **/*.c **/*.h; do
mv "$i"{,.old}
printf '\xEF\xBB\xBF' | cat - "$i.olg" > "$i"
done
```
甚至 ed + find: `find . -name '*.c' -o -name '*.c ’ -exec ed -e $'0a\n\xEF\xBB\xBF\n.\nw\nq'`(原谅我的 ed 恶趣味,毕竟 sed 还是不大会用……)

谢谢,厉害

我现在看回来想起来 ed 没有 -e ,还是用 ex -c 吧((((

你这个有问题啊。已经有 BOM 头的就被搞了。

我本来是想说单向不考虑 BOM 转换的。一致化的话其实也不麻烦,按照 sed 的话就是 -e '0s/\x 那啥啥 //1' -e '0a 补上去' 之类的……(总之先去掉再喂回去那个意思啦(我还是不会 sed …

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服