用Bitbucket编辑文件将其添加到文件的开始:M-om-; m-



首先,什么是 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-oM-;M-?是表示非ASCII字符为ASCII的表示技术。具体来说,它们是一种编码技术,可以显示位7(0x80(,然后将其余部分显示为"字符为ASCII"。小写o是代码0x6f;0x3b?0x3f。将高位(0x80(放回所有三个,然后丢弃0x并使用大写,我们获得了值EFBBBF。如果没有其他的话,您应该记住此顺序 - 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。

最新更新