fpdf "UnicodeEncodeError: 'latin-1' codec can't encode character '\u2013' in position 88: ordinal not in range(256)"

fpdf "UnicodeEncodeError: 'latin-1' codec can't encode character '\u2013' in position 88: ordinal not in range(256)"

我试图在 Python 中将文本文件转换为 pdf,但出现错误。为什么会发生这种情况,我该如何解决?

这是我的代码:

import fpdf
from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font("Arial", size=15)
f = open("textfile.txt", "r")
for i in f:
    pdf.cell(200, 10, txt=i, ln = 1, align = 'C')
pdf.output("Output.pdf")

输出:错误

    p = self.pages[n].encode("latin1") if PY3K else self.pages[n] 
UnicodeEncodeError: 'latin-1' codec can't encode character '\u2013' in position 88: ordinal not in range(256)

fpdf中的所有标准字体都使用latin-1编码。如果要写入不在 latin-1 集中的字符,则需要使用 set_font 指定外部字体。

参考: https://pyfpdf.readthedocs.io/en/latest/reference/set_font/index.html

否则,您必须将字符串转换为 latin-1(使用 encode 方法)并指定是否忽略或替换坏字符(即不存在于latin-1).

这是因为 pyfpdf 的默认字体是 latin-1 编码的。

您需要下载像 Arial (https://www.freefontspro.com/14454/arial.ttf) 这样的 utf-8 编码字体,将其放在与 python 文件相同的目录中,然后使用 [=12= 添加字体]

fpdf.add_font("Arial", "", "arial.ttf", uni=True)

设置字体时使用'Arial'