GitHub markdown 不渲染,git 在没有更改时检测更改

Dav*_*nan 2 git markdown github

我在 GitHub markdown、VSCode markdown 扩展和其他地方也注意到了一个问题。它在 GitHub 上和使用 git 时的表现尤其异常。

\n\n

当我输入诸如# heading或 之类的标题时## sub-heading,标题经常无法正确呈现。以下是 Markdown 文件的提交示例:

\n\n

来源差异:

\n\n

\n\n

丰富的差异:

\n\n

\n\n

正如您所看到的,丰富的差异无法正确呈现,因此当我进入“浏览文件”时,文件也不是正确的(无论我使用什么计算机/设备):

\n\n

\n\n

不知何故,删除后面的空格字符###并重新键入后,需要提交更改。据我所知,这不应该发生(因为实际上没有任何改变,我只是重新输入了空格字符)。但我还是提交了它并得到了以下差异:

\n\n

\n\n

正如您所看到的,空格字符被突出显示。现在我神奇地得到了以下丰富的差异,它现在显示标题:

\n\n

\n\n

现在,当我“浏览文件”时,标题会显示在我使用的每台计算机上:

\n\n

\n\n

这种情况在我身上经常发生,我想知道为什么会发生这种情况,git 如何能够不提交任何更改,以及是否有办法解决这个问题?

\n\n

这绝对不仅仅是我,因为过去其他人也向我提到过这一点。

\n\n

注意:我的 GitHub 存储库是私有的,因此我无法共享链接,但它应该很容易复制。

\n\n

更新

\n\n

我打开了 HxD 中存在问题的修订版本,并得到以下十六进制输出:

\n\n

\n\n

然后我替换了 VSCode 中的空格字符并得到以下十六进制输出:

\n\n

\n\n

有一个额外的\xc3\x82字符未在 VSCode 中显示并且我没有输入。我在 Windows 和 Mac 操作系统上都遇到过这个问题。

\n\n

更新2

\n\n

ascii 和 utf-8 都将字符定义为,\xc3\x82所以我无法弄清楚为什么它没有显示在 VSCode 或 GitHub 文本编辑器中。

\n\n

我还在https://www.asciitable.com/上看到了 ascii 将其定义为以下内容

\n\n

\n

pok*_*oke 5

字节序列0xC2 0xA0是字符U+00A0NO-BREAK SPACE的 UTF-8 序列。因此,它是一个不间断的空格字符,这解释了为什么它在编辑器中看起来像空格,并且与简单空格相比显示为差异。

\n\n

它在十六进制编辑器中显示的事实\xc3\x82很简单,因为十六进制编辑器只在文本表示中显示 ASCII,因为它们一次只查看一个字节。因此,它们不\xe2\x80\x99t 寻找这样的字符序列,这是 UTF-8 对 ASCII 空间之外的字符进行编码所需的。

\n\n

至于为什么不间断空格会破坏 Markdown 解析器,如果解析器符合CommonMark 规范,这是预料之中的。根据它,ATX 标题后面需要跟一个空格,其中空格被明确定义U+0020SPACE 字符。

\n

  • @DavidCallanan我刚刚意识到为什么这种情况至少发生在我身上 - 在 Mac OS 上插入不间断空格的按键绑定只是 Option+space,这意味着如果您在执行 Option+3 创建降价后不小心按住了 Option标题#,您错误地插入了不间断空格。 (2认同)