【问题标题】:GitHub markdown not rendering and git detecting changes when no changesGitHub markdown 不呈现,git 在没有更改时检测更改
【发布时间】:2019-11-29 21:01:37
【问题描述】:

我在 GitHub markdown、VSCode markdown extension 和其他地方也注意到了一个小故障。它在 GitHub 上和使用 git 时表现得特别不寻常。

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

来源差异:

丰富的差异:

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

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

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

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

这发生在我的很多人身上,我想知道为什么会发生这种情况,git 是如何做到不进行任何更改的,以及是否有办法解决这个问题?

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

注意:我的 GitHub 存储库是私有的,所以我不能分享链接,但它应该很容易复制。

更新

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

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

有一个额外的Â 字符没有显示在 VSCode 中,我也没有输入。我在 Windows 和 Mac OS 上都遇到过这个问题。

更新 2

ascii 和 utf-8 都将字符定义为 Â,所以我不知道为什么它没有出现在 VSCode 或 GitHub 文本编辑器中。

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

【问题讨论】:

  • “git 是如何实现不做任何更改的” – 嗯,问题是存在 差异,正如您从事实上存在差异。 ### 和标题之间的空格很可能不是正常的空格,这也可能是 Markdown 解析器不将其作为标题的原因。您可以复制/粘贴确切的字符串,以便我们检查那里使用的实际字符吗?您还可以在十六进制编辑器中打开文件并查看其中的实际字节以找出实际存在的字符。
  • \xa0 是“不间断空格”,我猜 github 的降价不能将其识别为标题中的有效空格字符

标签: git github markdown


【解决方案1】:

字节序列0xC2 0xA0 是字符U+00A0 NO-BREAK SPACE 的UTF-8 序列。所以它是一个non-breaking space 字符,它解释了为什么它在编辑器中看起来像一个空格,并且与简单空格相比显示为不同。

它在十六进制编辑器中显示为Â 的事实仅仅是因为十六进制编辑器只在文本表示中显示 ASCII,因为它们一次只查看一个字节。所以他们不会寻找像这样的字符序列,这是 UTF-8 对 ASCII 空间之外的字符进行编码所必需的。

至于为什么不间断空格会破坏 Markdown 解析器,如果解析器符合CommonMark specification,这是意料之中的。根据它,ATX 标题是required to be followed by a space,其中一个空格是explicitly defined 是一个U+0020 空格字符。

【讨论】:

  • 感谢您的回答。我仍然对为什么 VSCode 和 GitHub markdown 编辑器随机决定不时插入“不间断空格”而不是正常空格感到困惑。
猜你喜欢
  • 2015-06-23
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
  • 2018-09-03
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 2016-05-29
相关资源
最近更新 更多