我在使用Python写入PDF时,遇到了一个关于变量内容的Unicode问题。
它输出以下错误信息:
UnicodeEncodeError: 'latin-1' codec can't encode character '\u2013'
问题出在它基本上被悬挂在一个em dash上。
我尝试将包含“em dash”的变量重新定义为例如'.encode('utf-8')
',即如下所示:
Body = msg.Body
BodyC = Body.encode('utf-8')
现在我遇到了以下错误:
Traceback (most recent call last):
File "script.py", line 37, in <module>
pdf.cell(200, 10, txt="Bod: " + BodyC, ln=4, align="C")
TypeError: can only concatenate str (not "bytes") to str
以下是完整代码,我该如何简单地解决'
Body
'变量内容中的Unicode错误。将其转换为
utf-8
或western
,任何一个超出'latin-1
'范围的都要进行转换。有什么建议吗?
完整代码:
from fpdf import FPDF
import win32com.client
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
msg = outlook.OpenSharedItem(r"C:\User\language\python\Msg-To-PDF\test_msg.msg")
print (msg.SenderName)
print (msg.SenderEmailAddress)
print (msg.SentOn)
print (msg.To)
print (msg.CC)
print (msg.BCC)
print (msg.Subject)
print (msg.Body)
SenderName = msg.SenderName
SenderEmailAddress = msg.SenderEmailAddress
SentOn = msg.SentOn
To = msg.To
CC = msg.CC
BCC = msg.BCC
Subject = msg.Subject
Body = msg.Body
BodyC = Body.encode('utf-8')
pdf = FPDF()
pdf.add_page()
# pdf.add_font('DejaVu', '', 'DejaVuSansCondensed.ttf', uni=True)
pdf.set_font("Helvetica", style = '', size = 11)
pdf.cell(200, 10, txt="From: " + SenderName, ln=1, align="C")
# pdf.cell(200, 10, border=SentOn, ln=1, align="C")
pdf.cell(200, 10, txt="To: " + To, ln=1, align="C")
pdf.cell(200, 10, txt="CC: " + CC, ln=1, align="C")
pdf.cell(200, 10, txt="BCC: " + BCC, ln=1, align="C")
pdf.cell(200, 10, txt="Subject: " + Subject, ln=1, align="C")
pdf.cell(200, 10, txt="Bod: " + BodyC, ln=4, align="C")
pdf.output("Sample.pdf")
- 如何从
'latin1'
转换?
- 有没有一种全局修复这些问题的方法?
str(msg.Body)
进行消息正文的转换吗? - ladygremlinBody = msg.Body
->Body = str(msg.Body)
Body = msg.Body
->Body = str(msg.Body)
- ladygremlin