UnicodeEncodeError: 'latin-1' codec can't encode when trying to write hebrew to a PDF

UnicodeEncodeError: 'latin-1' codec can't encode when trying to write hebrew to a PDF

我正在尝试使用 Python

中的 FPDF 库将一些希伯来语单词写入 pdf 文件

我遇到了一个错误

UnicodeEncodeError: 'latin-1' 编解码器无法对位置 51-55 中的字符进行编码:序号不在范围内 (256)

我该如何解决这个问题并将希伯来语写入 PDF 文件?

在下面添加我的代码

     pdf = FPDF()
    pdf.add_page()
    pdf.set_font("Arial", size=15)
    welcome="היייי"
    pdf.cell(200, 10, txt=welcome, ln=1, align="C")
    pdf.output("simple_demo.pdf")

来自 set_font 文档:

Standard fonts use Latin-1 encoding by default, (...)

Default encoding is not specified, but all text writing methods accept only Unicode for external fonts and one byte encoding for standard.

您的 Arial 是标准系列,因此它只接受 Latin-1 编码(1 字节)。因此,您应该使用非标准字体更改字体,以便拥有 Unicode 字体,从而获得希伯来语文本。

看这个例子:https://pyfpdf.readthedocs.io/en/latest/Unicode/index.html

from fpdf import FPDF

pdf = FPDF()
pdf.add_page()

# Add a DejaVu Unicode font (uses UTF-8)
# Supports more than 200 languages. For a coverage status see:
# http://dejavu.svn.sourceforge.net/viewvc/dejavu/trunk/dejavu-fonts/langcover.txt
pdf.add_font('DejaVu', '', 'DejaVuSansCondensed.ttf', uni=True)
pdf.set_font('DejaVu', '', 14)

text = u"""
English: Hello World
Greek: Γειά σου κόσμος
Polish: Witaj świecie
Portuguese: Olá mundo
Russian: Здравствуй, Мир
Vietnamese: Xin chào thế giớia
Arabic: مرحبا العالم
Hebrew: שלום עולם
"""