【问题标题】:pandoc complains about utf-8 decoding error even if my file is valid utf-8 encoded file即使我的文件是有效的 utf-8 编码文件,pandoc 也会抱怨 utf-8 解码错误
【发布时间】:2018-06-05 21:11:22
【问题描述】:

我正在尝试在 Windows 系统上使用 pandoc 将降价文件转换为 pdf。由于我的markdown包含中文字符,我使用以下命令生成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 编码。

我尝试过但没有成功的事情

非utf8字符的Grep

遵循指令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

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

我的问题

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

其他信息

  • 可以找到markdown文件here

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

【问题讨论】:

  • grep $´\xbd' test.md 应该向您显示违规行。如果它们很长,这也是为什么要换行的教训。
  • Stack Overflow 用于编程问题。这可能适合我们的姊妹网站Super User(但请查看他们的指南,并查找重复的问题)。
  • @tripleee 你给出的命令不起作用。
  • 可能取决于语言环境等。perl -ne 'print if /\xbd/' test.md 或许那时;但实际上,请尝试建议的副本中的命令。

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


【解决方案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中的大师,终于找到了原因。本质上,如果在处理 tex 文件的过程中遇到无效的控制序列,xelatex 将产生无效的 utf-8 序列。有关详细信息,请参阅 herehere

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

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

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

【讨论】:

    猜你喜欢
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 2019-08-16
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    相关资源
    最近更新 更多