Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
patrickstar
V2EX  ›  Linux

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

  •  
  •   patrickstar · Nov 23, 2015 · 3113 views
    This topic created in 3824 days ago, the information mentioned may be changed or developed.
    目前写的 C/C++源程序都是在 linux 下编辑、编译链接的,源文件(有中文字符)都是 UTF-8 编码。

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

    准备用 Python 写一个程序来自动转编码,还得先去学习编码格式的东西,把 UTF-8 自动转换为 UTF-8 with BOM ,否则一个一个转换太烦人了
    Arthur2e5
        9
    Arthur2e5  
       Nov 24, 2015   ❤️ 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
       Nov 24, 2015 via iPad
    @Arthur2e5 谢谢,厉害
    Arthur2e5
        11
    Arthur2e5  
       Nov 24, 2015
    @patrickstar 我现在看回来想起来 ed 没有 -e ,还是用 ex -c 吧((((
    iamfredng
        12
    iamfredng  
       Dec 1, 2015
    @Arthur2e5 你这个有问题啊。已经有 BOM 头的就被搞了。
    Arthur2e5
        13
    Arthur2e5  
       Dec 2, 2015
    @iamfredng 我本来是想说单向不考虑 BOM 转换的。一致化的话其实也不麻烦,按照 sed 的话就是 -e '0s/\x 那啥啥 //1' -e '0a 补上去' 之类的……(总之先去掉再喂回去那个意思啦(我还是不会 sed …
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   936 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 1113ms · UTC 19:30 · PVG 03:30 · LAX 12:30 · JFK 15:30
    ♥ Do have faith in what you're doing.