Python 报告实验室可以';t处理希伯来语(unicode)

Python 报告实验室可以';t处理希伯来语(unicode),python,reportlab,non-ascii-characters,Python,Reportlab,Non Ascii Characters,我试图通过以下python编程生成pdf,但生成的输出不能正确显示希伯来文字母 # -*- coding: utf-8 -*- from reportlab.pdfgen import canvas def hello(c): c.drawString(100,100, "מה שלומך") c = canvas.Canvas("hello.pdf") hello(c) c.showPage() c.save() 如果您使用适当的解码调用,如“מהשלהך”。解码(“utf-8”),

我试图通过以下python编程生成pdf,但生成的输出不能正确显示希伯来文字母

# -*- coding: utf-8 -*-
from reportlab.pdfgen import canvas
def hello(c):
    c.drawString(100,100, "מה שלומך")
c = canvas.Canvas("hello.pdf")
hello(c)
c.showPage()
c.save()

如果您使用适当的解码调用,如
“מהשלהך”。解码(“utf-8”)
,它会工作

# -*- coding: utf-8 -*-
from reportlab.pdfgen import canvas
def hello(c):
    c.drawString(100,100, "מה שלומך".decode("utf-8"))
c = canvas.Canvas("hello.pdf")
hello(c)
c.showPage()
c.save()
此代码(见下文)有效!您只需将
ArialHB.ttf
(或任何其他支持希伯来文字符的字体)放入
site packages/reportlab/font

所需的输出将位于pdf页面的底部

# -*- coding: utf-8 -*-

from reportlab.pdfgen import canvas 
from reportlab.pdfbase import pdfmetrics 
from reportlab.pdfbase.ttfonts import TTFont 

pdfmetrics.registerFont(TTFont('Hebrew', 'ArialHB.ttf'))

def hello(c):
    c.setFont("Hebrew", 14)
    c.drawString(10,10, u"מה שלומך".encode('utf-8'))

c = canvas.Canvas("hello.pdf") 
hello(c) 
c.showPage()
c.save()

drawString
之前您是否尝试过使用
setFont
更改字体?我不知道应该设置哪种字体类型,或者更简单地说,使用
u“משלךמך”
。Hrm、Reportlab声明
unicode
utf-8
编码字符串都受支持,因此这不是答案。请参阅,第41页,第3.1节。我的经验是ReportLab在Unicode上会出错,您需要使用UTF-8。通过确保所有内容都是UTF-8,我已经解决了许多非ASCII字符的问题。上述解决方案不适合我。我已经尝试过这些排列和组合。