技术解析

git 在提交和签出的时候能否配置自动转换文件编码格式?
0
2021-06-30 10:21:32
idczone
团队使用 GitLab ,现有的软件库(主要为 C/C++)基本都是在 linux 下编写的采用了 UTF-8 编码(无 BOM )纳入仓库,现在部分程序需要构建 Windows 版本(采用 VC12 ),面临最大的问题就是 VC12 的 cl, link, nmake 工具都不支持“无 BOM 的 UTF-8 ”编码( VC12 可以支持 UTF-8 with BOM 编码,但无 BOM 的 UTF-8 编码好像被中文 Windows 解析为 GBK 了),所以希望在 Winodows 上使用 git 在签出时能自动转换为 UTF-8 with BOM (即加上三个字节的 BOM 头),提交前能自动变回去(无 BOM 的 UTF-8 )提交,就像在 Windows 平台下把 core.autocrlf 设置为 true 时自动转换 LF 和 CRLF 这样子

不知道 git 能不能实现这样的需求,如果不行就只有写个 python 脚本,在每次提交前和签出后进行手动转换
我真不明白微软为啥子不认真支持一下 UTF-8 without BOM ,对于 UTF-8 ,好像加个 BOM 没有什么意义啊

u8 不知道能不能解决

https://git-scm.com/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-Git-%E9%92%A9%E5%AD%90
git hook 不知道能不能实现你的需求?

可能我没说明白,我说的是源程序文件的编码,不是说程序内 字符串等内容的编码

好像可以,只要能够加钩子,我尝试一下子,谢谢!

https://git-scm.com/docs/githooks

何必这么麻烦,你在构建脚本上检测一下 windows 环境然后 chcp 65001 不就得了


chip 65001 后可能可以在 cmd 下正确显示 UTF-8 文件内容(比如 type utf8.txt 可以把文件内汉字显示出来),但是关键问题是 Visuanl Studio 的 C++ 构建工具(如 cl.exe )不认识 UTF-8 without BOM 文件,这个问题主要出在微软的 VS 工具,参见: https://msdn.microsoft.com/en-us/library/xwy0e8f2(v=vs.120).aspx

但你的描述是 [但无 BOM 的 UTF-8 编码好像被中文 Windows 解析为 GBK 了]
这个显然是根据配置或者环境来确定的
应该在这个环节上来解决问题,如果环境不生效( chcp ),请检查一下项目配置是否有不正确的地方
我就不信你把 Windows 的 system profile 和 user profile 的 default charset 都配置成 utf8 了还会用 GBK 加载?难道 VS 是专门给中国人写的吗

我面临同样的问题。楼主解决这个问题了吗, 能否分享以下方案?

一直未来得及学习 git hook 和它支持的脚本语法,所以还没解决!
现在写了个 python 代码手动转换一下,临时凑合一下子

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