源代码的文件编码和文件格式
作者: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表示。
$ echo $LANG
zh_CN.UTF-8
下面几个crazepony固件代码文件,就是使用的Windows下的默认编码gb2313。为了在某些工具下(例如gitk工具)中文不显示为乱码,我们要求所有的文件都使用utf-8编码。但是由于我们现在使用的Keil 4不支持utf-8编码,所以utf-8编码的中文在Keil 4下面会显示为乱码,所以这部分固件代码没有使用utf-8编码。
$ file User_Src/*
User_Src/main.c: ISO-8859 C++ program text
User_Src/Sys_Fun.c: ISO-8859 C program text
User_Src/Sys_Fun.h: ISO-8859 C program text
……
行结束符问题
在Linux/Windows/Mac下,行结束符不一样。这样在多个平台之间进行协作开发时,在checkin和checkout之后,会有很多行结束符不统一引起的问题。
添加.gitattribute文件,可以解决行结束符在多个平台下不一致的问题。
# Explicitly declare text files we want to always be normalized and converted
# to native line endings on checkout.
* text
# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
*.gif binary
*.jar binary
*.so binary
style/fonts/* binary
style/images/* binary
上面为现在使用的.gitattribute配置,解释如下:
- 代码库中都为LF,也就是checkin的时候,会把所有文件的行结束符转化为LF;
- 工作路径下为所在OS的行结束符,也就是在checkout的时候,git回自动根据当前的OS将文件的行结束符做转化;
- 对于图片(以png/jpg/gif等结尾),jar库,和so文件等二进制文件,不进行转化;