Python 将unicode文本插入pyx画布

Python 将unicode文本插入pyx画布,python,django,pyx,Python,Django,Pyx,我有一组UTF-8字符,我想将其插入PyX生成的pdf文件中。 我已将#-*-编码:utf-8-*-包含在文件的顶部。该代码与以下代码有些类似: # -*- coding: utf-8 -*- c = canvas.canvas() txt = "u'aあä'" c.text(2, 2, "ID: %s"%txt) c.writeEPSfile("filename.eps") 但我还是无法理解这一点 错误: 'ascii' codec can't encode character u'\xae

我有一组UTF-8字符,我想将其插入
PyX
生成的pdf文件中。 我已将
#-*-编码:utf-8-*-
包含在文件的顶部。该代码与以下代码有些类似:

# -*- coding: utf-8 -*-
c = canvas.canvas()
txt = "u'aあä'"
c.text(2, 2, "ID: %s"%txt)
c.writeEPSfile("filename.eps")
但我还是无法理解这一点

错误:

'ascii' codec can't encode character u'\xae' in position 47: ordinal not in range(128)
试试这个:

# -*- coding: utf-8 -*-
c = canvas.canvas()
txt = u'aあä'.encode('utf-8')
c.text(1, 4, "UID: %s"%(txt))
c.writeEPSfile("filename.eps")

您可以将PyX设置为将unicode字符传递给(La)TeX。然后在TeX/LaTeX中生成有问题的字符就成了一个问题。这里有一个非常简单的解决方案来产生所讨论的输出:

from pyx import *

text.set(cls=text.LatexRunner, texenc='utf-8')
text.preamble(r'\usepackage[utf8]{inputenc}')
text.preamble(r'\usepackage{newunicodechar}')
text.preamble(r"\newunicodechar{あ}{{\usefont{U}{min}{m}{n}\symbol{'102}}}") 
text.preamble(r'\DeclareFontFamily{U}{min}{}')
text.preamble(r'\DeclareFontShape{U}{min}{m}{n}{<-> udmj30}{}')

c = canvas.canvas()
c.text(0, 0, 'UID: aあä')
c.writeGSfile('utf8.png')
从pyx导入*
text.set(cls=text.LatexRunner,texenc='utf-8')
序言(r'\usepackage[utf8]{inputenc})
序言(r'\usepackage{newunicodechar}')
正文.序言(r“\newunicodechar{あ}{{\usefont{U}{min}{m}{n}\symbol{'102}}”)
序言(r'\DeclareFontFamily{U}{min}{}
序言(r'\DeclareFontShape{U}{min}{m}{n}{udmj30}{}
c=canvas.canvas()
c、 文本(0,0,'UID:aあä')
c、 writeGSfile('utf8.png')
这直接导致输出(如此处上传的PNG):


请注意,这是使用Python 3上的PyX 0.13和一个相当标准的LaTeX安装完成的。此外,我还使用了有关在LaTeX中创建这些字符的一些信息。似乎有像CJKutf8这样的解决方案可以在LaTeX中设置所有类型的字符以直接用作unicode字符,但这与我的经验不符。无论如何,它是如果所有设置都已正确完成,则uld在PyX中的工作与LaTeX本身一样正常。祝您好运!

也许您可以从babel软件包中找到相应的设置 当我尝试插入德语
ä
(umlaut)时,我遇到了相同的错误。我只是添加了德语babel软件包:

text.preamble(r"\usepackage[ngerman]{babel}")
在此之后,这是可能的,没有错误:

c.text(12, 34, "äöüßß")
我还使用了utf8输入编码,我认为这也是必要的

进一步阅读:


向我们展示有关将某些内容插入pdf文件的代码。我已将代码添加到问题中。我再次遇到错误:“ascii”编解码器无法解码第3位的字节0xe3:序号不在范围内(128)@user3280299检查我的更新。你必须使用unicode对象进行编码。我将你的编辑添加到代码中,但我仍然得到上面的结果error@user3280299你能更新你问题中的整个回溯错误信息,告诉我错误发生在哪里吗?