Markdown 的 MIME 类型是什么?

147

有没有人知道是否存在一种用于Markdown的MIME类型?我猜它是text/plain,但是否有更具体的类型?

5个回答

169

简版: 自2016年3月起使用text/markdown

在2016年3月,text/markdown在IETF上被注册为RFC7763标准

此前应该是text/x-markdown。以下内容描述的是2016年3月之前的情况,当时RFC7763还是一份草案。


关于Gruber的定义,没有官方的推荐意见,但在官方邮件列表上进行了广泛讨论,并选择了text/x-markdown

这个结论后来被质疑,但已经得到确认,并且可以被认为是共识。

在缺乏官方mime类型的情况下,这是唯一的合理结论:text/将在几乎所有地方提供适当的默认值,x-表示我们不使用官方类型,markdown而不是gruber或其他类型,因为该类型现在如此常见。

然而,Markdown 的不同“口味”仍存在一些未知因素。我猜应该有人注册一个官方类型,这似乎很容易,但除了John Gruber之外,我怀疑是否有人敢这样做,因为他最近证明了他对Markdown的依赖。

在IETF上有一个草案,用于text/markdown,但其内容似乎根本没有描述Markdown,所以在其变得更完整之前,我不会使用它。


136

没有官方标准的类型,但text/markdown似乎是最常见的事实标准类型。大多数浏览器和其他足够先进的客户端都会看到text/部分并默认为text/plain,因此没有什么区别。

不过,有一个注意点:所有text/层次结构下的类型在相关的RFC标准中都默认使用ISO-8859-1作为其字符类型。世界上大部分地区已经转向了UTF-8。因此,除非您确定不会使用任何奇怪的字符(或者生活在旧版Windows世界中),否则您可能需要按如下方式指定:

text/markdown; charset=UTF-8

4
如果邮件客户端支持并以Daringfireball Markdown为基础,那将是很棒的。不幸的是,它们并没有支持。我甚至不知道是否有人将其作为草案RFC提交给了IETF。我还研究了丰富文本MIME类型,并发现它在许多邮件客户端中不再被支持 - 现在更偏爱HTML邮件。此外,“丰富文本格式”从未支持超链接。 - Volomike
42
“有趣的字符”指的是全世界绝大多数人每天用来交流的字符。” - keegan
45
是的,没错。世界上有很多有趣的人物角色。我尽力成为其中之一。 - SFEley
32
如果您正在自行实现此功能,建议使用 text/markdown 格式:在2012年6月,RFC 6648(最佳当前实践178)已经废弃了 x- 前缀。 - Stuart P. Bentley
1
丹尼尔:那已经过时了。自1521以来,已经有许多“相关”的RFC,并且它们在某种程度上是相互矛盾的。RFC 2046说:“在缺少字符集参数的情况下必须假定的默认字符集是US-ASCII。”但是RFC 2616则表示,在HTTP/1.1标头中,如果发送方未提供显式的字符集参数,则定义了“文本”类型的媒体子类型在通过HTTP接收时具有默认字符集值“ISO-8859-1”。这在6648中得到了澄清。 - SFEley
显示剩余3条评论

13

12
根据2016年的RFC7763“文本/降价类型”,一般的MIME类型是:
text/markdown; charset=UTF-8

在这里,charset参数是必需的,但不一定是UTF-8

该RFC还指定了一个可选的variant参数,而Internet Assigned Numbers Authority维护着一个Markdown变体注册表, 可以通过该注册表指定具体的Markdown变体,例如:

text/markdown; charset=UTF-8; variant=Original
text/markdown; charset=UTF-8; variant=GFM
text/markdown; charset=UTF-8; variant=CommonMark

一些变体允许进一步的参数,如RFC7764 “Markdown指南”所指定的, 例如,您可以使用pandoc变体添加extensions=-startnum来指定方言的微调, 尽管我不知道pandoc实际上如何解释它。

为什么需要字符集?

RFC2046 “MIME第二部分”于1996年将US-ASCII设置为默认字符集,但也指出:

“text”的任何未来子类型的规范必须指定 它们是否还将使用“charset”参数,并且可能会限制其值。

然后,RFC2616 “HTTP/1.1”于1999年 指定ISO-8859-1作为在HTTP上传输的text/*的默认字符集, 随着网络成为主要的交流方式, 这成为了text/*媒体类型的预设默认编码。

如果没有显式的字符集或注册的mime-type特定默认值,则认为text/*是 US-ASCII,除非该文本通过HTTP传输,在这种情况下,它被认为是ISO-8859-1。

RFC 6657“有关文本媒体类型中“charset”参数处理的MIME更新” 试图通过要求所有新的媒体类型注册 明确指定如何确定字符集, 最好是将其包含在有效负载中,如HTML所允许的那样,使用 <meta charset=UTF-8>

text/markdown 注册charset参数指定为“必需”。因此,使用内容类型为 text/markdown在技术上是无效的,并且此类内容的字符集可以合法地解释为未定义、无效、US-ASCII、 ISO-8859-1或实际上几乎总是UTF-8。


现在你只需要安装 https://github.com/simov/markdown-viewer — w00t! - Gwyneth Llewelyn

6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接