【发布时间】:2019-03-27 15:17:33
【问题描述】:
我正在使用 Python 3.7 并正在运行 FPDF 2.0.3 (https://pypi.org/project/fpdf2/) 的 python 端口。我正在使用很多 unicode 符号,其中一些符号需要成为 URL 的一部分。我可以毫无问题地将它们写成文本,但是当 unicode 符号成为我的 URL 的一部分时,我不断收到错误消息。
尝试使用 html.escape(str) 进行转义,但没有成功 重写代码以使用 write_html(html_as_str),这也不起作用
这是工作代码:
add = "Chronique d‘Égypte (CdE)" ##this is actually pulled in from a MYSQL query using PYMYSQL
from fpdf import FPDF
pdf = FPDF('P', 'mm', 'A4')
pdf.add_page()
pdf.add_font('base', '', r'C:\Fonts\DejaVuSans.ttf', uni=True)
pdf.set_font('base', '',12)
pdf.write(5, add)
pdf.output("goodfile.pdf", "F")
有了这个脚本,我得到了打印的字符串。但是我希望打印字符串并成为这样的 url 的一部分:
add = "Chronique d‘Égypte (CdE)" ##this is actually pulled in from a MYSQL query using PYMYSQL
from fpdf import FPDF
pdf = FPDF('P', 'mm', 'A4')
pdf.add_page()
pdf.add_font('base', '', r'C:\Fonts\DejaVuSans.ttf', uni=True)
pdf.set_font('base', '',12)
pdf.write(5, add, 'https://www.example.org/index.php?searchterm='+add)
pdf.output("goodfile.pdf", "F")
第二个脚本失败并在我的控制台中显示以下错误消息:
Traceback (most recent call last):
File ".\print.py", line 543, in <module>
pdf.output(Filename+'_CORPUS.pdf', 'F')
File "C:\Users\me\AppData\Local\Programs\Python\Python37\lib\site-packages\fpdf\fpdf.py", line 1239, in output
buffer = self.buffer.encode("latin1")
UnicodeEncodeError: 'latin-1' codec can't encode character '\u2018' in position 1587960: ordinal not in range(256)
错误消息本身非常混乱,因为添加导致错误的字符串的部分发生在第 470 行附近;而回溯只提到第 543 行。
我希望输出是我的 pdf 中的可点击链接,打开默认浏览器并使用 PDF 中的字符转到指定的 URL。我不能用普通的引号替换这个字符,因为它在那个网站上给了我其他(在这种情况下没有)结果。
另外,有人可以添加标签 FPDF2 来帮助正确分类吗?
【问题讨论】:
-
URL 可能应该以某种方式编码,但我们不知道您的服务器支持和期望哪种编码。一个合理的猜测是编码为 UTF-8 并对结果应用 URL 百分比编码;所以 "olé" 映射到
ol%C3%A9 -
感谢 Tripleee;这确实是问题所在。我必须从 urllib 导入引号,例如:` From urllib.parse import quote`,然后在字符串周围使用引号,例如:` pdf.write(5, add, 'example.org/index.php?searchterm='+quote(add)) `
标签: python python-3.x pdf unicode