pandoc抱怨utf-8解码错误,即使我的文件是有效的utf-8编码文件

时间:2017-12-23 17:45:01

标签: bash unicode utf-8 character-encoding pandoc

我正在尝试在Windows系统上使用pandoc将markdown文件转换为pdf。由于我的降价包含中文字符,因此我使用以下命令生成pdf:

pandoc --pdf-engine=xelatex -V CJKmainfont=KaiTi test.md -o test.pdfbut

但是pandoc抱怨该文件包含无法处理的非utf8字符,确切的错误信息是:

  

生成PDF时出错。
  !未定义的控制顺序。
  pandoc.exe:无法解码字节'\ xae':> Data.Text.Internal.Encoding.streamDecodeUtf8With:无效的UTF-8流

根据我在互联网上找到的内容。这主要是由于markdown文件的编码,可能与pandoc无关。我的文件包含很多中文字符和英文字符。我已将其转换为utf-8编码。

我尝试但未成功的事情

Grep表示非utf8字符

按照说明herehere进行操作。我已验证系统区域设置为UTF-8,localectl status的输出为:

   System Locale: LANG=en_US.UTF-8
       VC Keymap: us
      X11 Layout: us

我试图grep非utf8字符。使用的命令是grep -axv '.*' test.md。但命令输出什么都没有。 (我认为这意味着没有无效的字符无法被utf-8解码。)

尝试丢弃无效字符

我按照here指令尝试从我的文件中删除非utf8字符。我使用的命令是:

iconv -f utf-8 -t utf-8 -c test.md > output.md

之后,当我尝试使用output.mdpandoc转换为pdf时。我仍然遇到相同的错误消息,这表明该文件仍包含非utf8字符。

我的问题

如何确定文件的哪个部分导致问题或如何真正从文件中删除非utf8字符,以便我可以编译错误?

其他信息

  • 您可以找到降价文件here

  • 如果您使用的是Linux系统,则可能需要将CJKmainfont设置为系统中其他有效的中文字体名称。

1 个答案:

答案 0 :(得分:1)

问题是由于在没有转义的情况下在markdown中使用反斜杠引起的。 Pandoc处理反斜杠后跟markdown中的文本作为LaTeX命令。使用以下命令生成pdf:

pandoc -f markdown-raw_tex --pdf-engine=xelatex -V CJKmainfont=KaiTi test.md -o test.pdf

然后错误消失,pdf文件可以成功生成。

随访

感谢tex.stackexchange中的大师,最终找到了原因。本质上,它是xelatex,如果在处理tex文件期间遇到无效的控制序列,它将产生无效的utf-8序列。有关详情,请参阅herehere

更新2017.12.29
 使用release of Pandoc 2.0.6,可以更好地处理此行为:

  

允许对乳胶错误日志进行宽松解码,这些日志并不总是正确的UTF8编码

现在,调试此类问题更容易。