【问题标题】:Template2pdf, django incorrect non-ascii charactersTemplate2pdf,django 不正确的非 ascii 字符
【发布时间】:2012-03-13 12:36:56
【问题描述】:

我正在尝试使用 template2pdf.dj 为我的 django 站点生成报告。因为我来自立陶宛,所以我必须使用一些非 ascii 字符(ąčęėįšųūž)。但是当我从 rml 获取我的 pdf 时,一些字符显示正确(š,ž),但其他字符只是黑色方块。我试图更改 rml 文件中的字体。如果我使用 Repotlab 建议的那些,我会得到相同的输出。但如果我尝试使用其他一些(如 Arial),它会给我一个错误,它无法确定家庭/粗体/斜体。

问题可能出在哪里?我必须将编码放在某处,还是更改字体?

【问题讨论】:

  • 这是一个unicode编码问题。您需要强制它使用 Latin-1(可能)。但是我不熟悉reportlab API,所以我将把它留给其他人

标签: django reportlab non-ascii-characters


【解决方案1】:

您需要强制使用 UTF-8 字符而不是 Unicode 字符。 ReportLab 需要 UTF-8,因此您必须确保所有内容都正确转换。根据我的经验,在 Python 中往往会发生的情况是,当您从文件或流中读取文本时,它会以 Unicode 编码形式出现,并且您必须跳过一些障碍才能使其输出 UTF-8 或任何您想要的。这对于非 ASCII 字符很重要,因为尽管 Unicode 使用 128 个额外字符用一个字节表示它们,你使用 8 位而不是 7 个 ASCII 使用,UTF-8 使用两个字节来表示非 ASCII 拉丁字符甚至更多其他字符的字节。不是 ASCII 的 Latin-1 中的所有内容在逐位级别上都不是 UTF-8,因此需要转换以及在 PDF 中获得块而不是字符的原因。

我不确定为什么某些字符显示正确;我希望它们都不起作用。不过无论如何,确保转换为 UCF-8 应该可以修复它。

【讨论】:

  • 抱歉,这个问题可能很愚蠢,但我应该怎么做呢?我找不到很好的例子......
【解决方案2】:

问题出在默认字体上。它们不是 unicode。我添加了自定义字体,效果很好。

【讨论】:

    猜你喜欢
    • 2011-06-05
    • 2019-05-21
    • 2021-06-08
    • 1970-01-01
    • 2013-12-22
    • 2022-01-01
    • 2018-04-07
    • 2011-06-22
    • 2011-08-10
    相关资源
    最近更新 更多