首先,什么是 M-oM-;M-?
?
当我将犯罪推向bitbucket时,有人使用在线编辑器进行小更改时,它将第一行从:
中更改<?xml version="1.0" encoding="utf-8"?>
to:
M-oM-;M-?<?xml version="1.0" encoding="utf-8"?>
我可以使用cat -A <myfile>
这是一个问题,因为这打破了我的*.csproj
文件,并且无法在Visual Studio中加载项目。
Bitbucket支持给了我有关.gitattributes
和Config的文章,我已经尝试过,但是问题仍然存在:
$ git config core.autocrlf
true
$ cat .gitattributes
*.js text
*.cs text
*.xml text
*.csproj text
*.sln text
*.config text
*.cshtml text
*.json text
*.sql text
*.ts text
*.xaml text
我也尝试了:
$ cat .gitattributes
*.js text eol=crlf
*.cs text eol=crlf
*.xml text eol=crlf
*.csproj text eol=crlf
*.sln text eol=crlf
*.config text eol=crlf
*.cshtml text eol=crlf
*.json text eol=crlf
*.sql text eol=crlf
*.ts text eol=crlf
*.xaml text eol=crlf
我是否缺少某些设置来帮助防止此组件插入文件的开始?
首先: M-o
, M-;
和 M-?
是表示非ASCII字符为ASCII的表示技术。具体来说,它们是一种编码技术,可以显示位7(0x80(,然后将其余部分显示为"字符为ASCII"。小写o
是代码0x6f
,;
是0x3b
,?
是0x3f
。将高位(0x80(放回所有三个,然后丢弃0x
并使用大写,我们获得了值EF
,BB
和BF
。如果没有其他的话,您应该记住此顺序 - fef bb bf,或者至少请记住它存在,因为它是 unicode unicode byte的 utf-8编码订购标记或bom,U+FEFF
(您还应该记住,至少存在它(。
有关一般的Unicode的更多信息,请参阅每个软件开发人员的绝对最低限度,因此,很积极地了解Unicode和字符集(没有借口!(。
。将Unicode存储为UTF-16时,字节订单标记具有目的:它告诉您存储的数据是UTF-16-LE还是UTF-16-BE。但是,将Unicode存储为UTF-8时,字节订单标记几乎完全没有用。我个人认为永远不要使用它。另一方面,微软显然认为它应该始终使用(或几乎总是(。请参阅下面的Wikipedia引用。
...有人使用在线编辑器...
这个在线编辑显然是由Microsoft撰写的,或者是由认为Microsoft正确的人撰写的。他们正在您的普通文本文件中插入UTF-8字节订单标记。
Bitbucket支持给了我有关
的文章.gitattributes
...
除非在线编辑器查看.gitattributes
文件中,否则这无济于事:是添加BOM的编辑器。
也就是说,自Git 2.18以来,Git具有working-tree-encoding
属性的概念。一些编辑可能会实际上看一下。我可能不正确理解微软的哲学 - 我已经注意到我不同意它。不过,我认为他们说:如果该文件的"主"副本应以UTF-16格式存储,则将BOM存储在任何UTF-8编码文件中。(旁注:UTF-8 BOM对UTF-16文件是UTF-16-LE或UTF-16-BE的任何信息,因此,我认为这是指标。UTF-16,UTF-16BE,UTF-16LE是UTF-16的ENDIAN,计算机的Endianness吗?(
在任何情况下,如果此编辑器确实会查看某些配置选项,设置配置选项(无论是什么(是否会有所帮助。如果没有,您在这里没有做任何事情都会有所帮助。请注意,working-tree-encoding
虽然与Unicode编码有关,但并不意味着应该或不应包括BOM。因此,如果您的git是2.18或更高版本,那么您可以扭转这个额外的旋钮,但这不是目的。如果确实有帮助,那太好了,但也很错。: - (
最奇怪的是:
[BOM]打破我的
*.csproj
文件,并且无法在Visual Studio中加载项目。
Visual Studio是Microsoft产品。Wikipedia页面指出:
Microsoft编译器和口译员,以及Microsoft Windows上的许多软件(例如Notepad(将BOM视为必需的魔术数字,而不是使用启发式方法。这些工具将文本保存为UTF-8时添加BOM,并且除非存在BOM或仅包含ASCII,否则无法解释UTF-8。
。
一个人会认为,如果他们的编辑坚持添加BOMS,他们的其他程序将能够处理BOMS。