Pyx unicode 文本

Posted

技术标签:

【中文标题】Pyx unicode 文本【英文标题】:Pyx unicode text 【发布时间】:2016-10-31 21:06:13 【问题描述】:

所以我正在尝试从 Python 生成 postscript。 目前在 Python3.4.2 上尝试使用 PyX 0.14.1, 但如果你知道一些更简单的事情,我愿意接受建议。

我主要遵循 PyX 上的建议 this thread 中的邮件列表。这是 Python2 并且已经很老了。 以下显示了经过多次更改后我当前的代码:

from pyx import *

text.set(cls=text.LatexRunner, texenc='utf-8')
text.preamble(r'\usepackageucs')
text.preamble(r'\usepackage[utf8x]inputenc')

c = canvas.canvas()
c.text(5, 5, "Sören Sundstrøm".encode("utf8"))

p = document.page(c, paperformat=document.paperformat.A4,
    centered=0)
d = document.document([p])
d.writePSfile('test.ps')

PyX 以 TexResultError 停止。错误的有趣部分 显示 TeX 中正在发生的事情:

pyx.text.TexResultError: unhandled TeX response (might be an error)
The expression passed to TeX was:
  \ProcessPyXBoxb'S\xc3\xb6ren Sundstr\xc3\xb8m'%
  1%
  \PyXInput7%
After parsing the return message from TeX, the following was left:
  *
  *! Undefined control sequence.
  <argument> b'S\xc 
                    3\xb 6ren Sundstr\xc 3\xb 8m'
  <*> 1
  (cut after 5 lines; use errordetail.full for all output)

所以看起来 Latex 接收的不是 utf-8, 但 utf-8 的转义表示。 我的问题:如何正确地将字符串传递给 canvas.text? 还是我的序言错了?

我也尝试在 SO 上关注this answer by wobsta, 但除了太复杂之外,它对我也不起作用。 (在这种情况下,看起来 PyX 不理解元字体消息)。

直接在具有相同前导码的简单 utf-8 输入文件上运行 Latex 顺便说一句,工作正常。

【问题讨论】:

找到了解决办法,很快就会回答自己。 【参考方案1】:

查看 PyX 代码发现了问题。 文本模块准备了一个带有 utf-8 编码的io.TextIOWrapper 用于 TeX 输入。 text.preamblecanvas.text 中的字符串参数被逐字传递给包装器,因此在 Python 3 中,您只需传递一个字符串而无需任何编码。编码将由包装器完成。

我的原始未简化代码还有另一个问题,这使得第一个问题很难解决。因此,为了完整起见,这是第二个问题及其解决方案。我的原始代码具有以下操作顺序:

from pyx import *

c = canvas.canvas()
# doing other stuff with canvas

text.set(cls=text.LatexRunner, texenc='utf-8')
text.preamble(r'\usepackageucs')
text.preamble(r'\usepackage[utf8x]inputenc')

c.text(5, 5, "Sören Sundstrøm")

p = document.page(c, paperformat=document.paperformat.A4,
    centered=0)
d = document.document([p])
d.writePSfile('test.ps')

这也不起作用,因为在创建画布时,它会保留对 text.defaulttexrunner 的引用,该引用是使用文本模块的当前设置设置的。更改的文本模块设置永远不会影响画布实例。因此,您必须在创建要在其中绘制文本的画布之前设置文本模块。

感谢任何对此进行调查的人。

【讨论】:

以上是关于Pyx unicode 文本的主要内容,如果未能解决你的问题,请参考以下文章

保存文本时怎么有unicode啥的

使用格式化将 ASCII 文本转换为 Unicode [关闭]

MFC 丢失 Unicode 文本

在 sql server 2008 中使用 unicode 文本

如何在文本视图中通过 unicode 设置表情符号?

unicode汉语翻译是啥意思