• 源代码的文件编码和文件格式
  • 文件编码
  • 行结束符问题

    源代码的文件编码和文件格式

    作者:nieyong

    文件编码

    原则上所有源代码默认使用utf-8编码。

    网站源码文件必须使用utf-8编码。如果使用其它的编码,例如中文中常见的gdb格式,会导致中文乱码,或者网页无法生成的问题。

    文件编码常识

    Windows操作系统默认文件编码是gbk,又叫做gb2312或者cp936。cp936是微软发布的用在文件系统中的编码方式,而gb2313是中国国家标准,又叫做ANSI格式编码。例如在notepad++编辑器上gb2312编码的文件就显示为ANSI格式编码;使用Linux下的file命令,则显示为ISO-8859;在Vim下使用set fenc?命令查看,则显示为fileencoding=euc-cn。其实这三种都是表示gb2313编码。

    Linux操作系统默认文件编码是utf-8,一般用系统宏$LANG表示。

    1. $ echo $LANG
    2. zh_CN.UTF-8

    下面几个crazepony固件代码文件,就是使用的Windows下的默认编码gb2313。为了在某些工具下(例如gitk工具)中文不显示为乱码,我们要求所有的文件都使用utf-8编码。但是由于我们现在使用的Keil 4不支持utf-8编码,所以utf-8编码的中文在Keil 4下面会显示为乱码,所以这部分固件代码没有使用utf-8编码。

    1. $ file User_Src/*
    2. User_Src/main.c: ISO-8859 C++ program text
    3. User_Src/Sys_Fun.c: ISO-8859 C program text
    4. User_Src/Sys_Fun.h: ISO-8859 C program text
    5. ……

    行结束符问题

    在Linux/Windows/Mac下,行结束符不一样。这样在多个平台之间进行协作开发时,在checkin和checkout之后,会有很多行结束符不统一引起的问题。

    添加.gitattribute文件,可以解决行结束符在多个平台下不一致的问题。

    1. # Explicitly declare text files we want to always be normalized and converted
    2. # to native line endings on checkout.
    3. * text
    4. # Denote all files that are truly binary and should not be modified.
    5. *.png binary
    6. *.jpg binary
    7. *.gif binary
    8. *.jar binary
    9. *.so binary
    10. style/fonts/* binary
    11. style/images/* binary

    上面为现在使用的.gitattribute配置,解释如下:

    • 代码库中都为LF,也就是checkin的时候,会把所有文件的行结束符转化为LF;
    • 工作路径下为所在OS的行结束符,也就是在checkout的时候,git回自动根据当前的OS将文件的行结束符做转化;
    • 对于图片(以png/jpg/gif等结尾),jar库,和so文件等二进制文件,不进行转化;