如何将正确的编码参数传递给markdown_py?

时间:2017-08-22 08:29:53

标签: python encoding character-encoding markdown

我使用markdown文件来编译我可以使用git存档的网络书签列表。我使用markdown_py将降价文档转换为html,因为我喜欢table of content extension

我有时使用重音字符,我的源文件编码为utf-8,所以它不应该是一个问题,但输出是垃圾。 例如,如果我运行

echo "é & à" | markdown_py -e utf-8 > output.html

我在output.html

中看到了这一点

enter image description here

1 个答案:

答案 0 :(得分:2)

您需要告诉浏览器输出正在使用哪种编码。

Markdown仅输出HTML片段,而不是整个文档。当浏览器只接收HTML片段时,它需要猜测丢失的片段并且似乎猜错了。将输出包装在适当的标签中,确保包含定义编码的元标记。

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>Page Title</title>
</head>

<body>
  {{ Markdown output goes here }}
</body>

</html>

Python-Markdown不可能输出HTML片段以外的任何内容。 feature request被拒绝,但有以下解释:

  

Markdown生成一个(X)HTML片段。它从来没有打算做更多的事情。如果您想要一个完整的HTML文档,那么您有责任将其包装起来。这是原始Markdown实现从一开始就的行为,我们反映它无意改变。

可以在功能请求的讨论中找到更多详细信息。简而言之,这是大多数Markdown实现的正常预期行为。要添加这样的功能,需要该工具不仅仅是Markdown解析器,而不是。对于简单的任务,快速shell脚本可以为您提供服务。对于更复杂的作业,静态站点生成器是更合适的工具。

项目文档没有直接解决这个问题。但是它会将first goal列为:

  

维护Python 2和Python 3库...作为跟踪syntax rules的markdown解析器的实现以及原始(markdown.pl)实现的行为尽可能合理。

实际上,这方面的行为与参考实现(markdown.pl)完全相同。由于Python-Markdown的文档仅涵盖了如何使用库和行为差异,因此没有讨论行为相同的功能。

为您提供基本功能的简单bash脚本可能是:

#!/bin/bash                                                                                                           

echo "<!DOCTYPE html>
<html>
<head>
  <meta charset=\"UTF-8\">
</head>
<body>" 

python -m markdown "$@"

echo "
</body>
</html>"

上面假设stdout(如果你将输出文件名传递给Markdown会失败)并将所有参数传递给Markdown。如果您将脚本命名为md2html(并且赋予了可执行权限:chmod +x md2html),那么您可以像这样运行它:

$ echo "é & à" | md2html -e utf-8 > output.html
$ cat output.html
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
</head>
<body>
<p>é &amp; à</p>
</body>
</html>