python - UnicodeEncodeError : 'latin-1' codec can't encode character '\u2013' (writing to PDF)

标签 python pdf unicode fpdf python-3.7

使用python写入.pdf时,Unicode的内容可变,出现问题。

正在输出此错误:

UnicodeEncodeError: 'latin-1' codec can't encode character '\u2013'

基本上,这是什么引起的。

我尝试过使用该变量,其中的内容带有'em破折号',并使用'.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-8western,除了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'


  • 还是要在全局范围内解决这些问题?
  • 最佳答案

    一种解决方法是在将所有文本传递到库之前,将所有文本转换为latin-1编码。您可以使用以下命令执行此操作:

    text2 = text.encode('latin-1', 'replace').decode('latin-1')
    
    text2将不包含任何非拉丁1字符。但是,某些字符可能会替换为?

    关于python - UnicodeEncodeError : 'latin-1' codec can't encode character '\u2013' (writing to PDF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56761449/

    相关文章:

    MySQL难点——平假名和片假名被当作一样对待

    Python MySQL 插入重复键

    python - 当缺少季度时如何确定 pandas 数据帧的季度行值的差异

    python - 用于 Python 的类似 Xpath 的包,用于在列表和字典中查找所有级别的键

    python - 我在 Spyder 上找不到文件资源管理器

    android - 以编程方式在android中创建一个pdf文件并写入其中

    c# - 每行阅读 PDF

    iOS pdf 加密 256 位 AES

    javascript - 从文本区域获取原始文本

    c++ - c++和g++如何处理unicode?