V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
patrickstar
V2EX  ›  Linux

Win、Linux 平台下的源程序文件编码格式问题

  •  
  •   patrickstar · 2015-11-23 17:29:05 +08:00 · 2507 次点击
    这是一个创建于 3092 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前写的 C/C++源程序都是在 linux 下编辑、编译链接的,源文件(有中文字符)都是 UTF-8 编码。

    但是这些源代码同时需要给别人在 Windows 的 VS2010 和 VS2013 中使用(平台相关代码已在源程序中做了条件控制),但是 VS 2010 的编译器根本不认 UTF-8 编码,网上看了一圈也一头雾水,请问有没有有经验的同仁给出一个解决方案啊,实在不想一个一个格式去实验验证了
    13 条回复    2015-12-02 12:47:04 +08:00
    bdbai
        1
    bdbai  
       2015-11-23 18:22:24 +08:00 via iPhone
    全部加上 BOM 头试试。
    vanxining
        2
    vanxining  
       2015-11-23 18:57:00 +08:00 via Android
    @bdbai
    正解,虽然一个很恶心的办法(违背了“文本文件”的定义)。
    GCC 现在也认带 BOM 的文件了。
    bdbai
        3
    bdbai  
       2015-11-23 19:04:48 +08:00 via iPhone
    @vanxining 写 PHP 的时候被坑得不轻,拿去编译的问题应该不大。
    如果用 Git 也能避免编码问题。
    lianz
        4
    lianz  
       2015-11-23 19:13:33 +08:00
    部分源码管理工具可以设置在签出的时候转换成本地格式。比如 Git
    patrickstar
        5
    patrickstar  
    OP
       2015-11-23 19:16:22 +08:00
    @bdbai
    @vanxining
    @bdbai
    @lianz
    谢谢,看来只能 UTF-8 with BOM 了,只要 gcc/g++认识和 cl/link 认识就行
    看来一下子 http://www.cnblogs.com/findumars/p/3620078.html ,只是很纠结!
    bdbai
        6
    bdbai  
       2015-11-23 19:23:10 +08:00 via iPhone
    @patrickstar 不做网页有 BOM 问题也不大。建议用 Git 。
    hualuogeng
        7
    hualuogeng  
       2015-11-23 19:57:59 +08:00
    @vanxining 老版本的 GCC 还是不认识的,前几天还专门为此问题转换过源代码
    patrickstar
        8
    patrickstar  
    OP
       2015-11-23 20:26:29 +08:00
    我最近才发现,跨平台下系统 API 和 C/C++函数库反而容易解决,而一个源程序编码搞得特别纠结!

    准备用 Python 写一个程序来自动转编码,还得先去学习编码格式的东西,把 UTF-8 自动转换为 UTF-8 with BOM ,否则一个一个转换太烦人了
    Arthur2e5
        9
    Arthur2e5  
       2015-11-24 03:38:06 +08:00   ❤️ 1
    @patrickstar 其实你都不需要写 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 还是不大会用……)
    patrickstar
        10
    patrickstar  
    OP
       2015-11-24 07:39:45 +08:00 via iPad
    @Arthur2e5 谢谢,厉害
    Arthur2e5
        11
    Arthur2e5  
       2015-11-24 10:00:35 +08:00
    @patrickstar 我现在看回来想起来 ed 没有 -e ,还是用 ex -c 吧((((
    iamfredng
        12
    iamfredng  
       2015-12-01 16:55:46 +08:00
    @Arthur2e5 你这个有问题啊。已经有 BOM 头的就被搞了。
    Arthur2e5
        13
    Arthur2e5  
       2015-12-02 12:47:04 +08:00
    @iamfredng 我本来是想说单向不考虑 BOM 转换的。一致化的话其实也不麻烦,按照 sed 的话就是 -e '0s/\x 那啥啥 //1' -e '0a 补上去' 之类的……(总之先去掉再喂回去那个意思啦(我还是不会 sed …
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   945 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 22:04 · PVG 06:04 · LAX 15:04 · JFK 18:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.