【发布时间】:2021-01-04 22:15:35
【问题描述】:
有很多很多地方描述了如何“强制”Git 将文件作为文本读取。通常,该解决方案涉及向.gitattributes 添加过滤器以将text 属性应用于文件。示例包括:
* text
* text=auto
* text diff merge
* text=auto diff merge
但如果文件包含 NUL,此解决方案似乎不起作用。这是一个带有 ANSI 编码和尾随空字节的示例文件文本文件:
它完全可以作为文本文件读取,只是 Git 无法读取。上面的每个示例过滤器都将失败,并且 Git 将无论如何都标识为“二进制”。我认为这是因为它在前 8000 个字符 (ref) 中对 NUL 进行了硬编码检查。
当然,只要我将文件转换为 UTF-8,Git 就会愉快地将其识别为文本。这是转换后的同一个文件:
坦率地说,我不介意不使用 ANSI 编码。我只是想避免在 Notepad++ 中不断打开文件只是为了修复文件编码。有没有办法让 Git 自动处理编码转换?
【问题讨论】:
-
没有主要的单字节编码(无论是否所谓的“ANSI”),其中 NUL 不是 NUL。同样的字节也是 UTF-8 中的 NUL。在将它们转换为 UTF-8 时,您的工具实际上会错误地去除这些字符。根据 POSIX,这根据定义不是文本文件,因为 NUL 在文本文件中永远不会有效。
标签: git character-encoding nul