【发布时间】:2010-03-18 06:36:30
【问题描述】:
运行从标准输入读取的 Python 程序时,我收到以下错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 320: ordinal not in range(128)
我该如何解决?
注意:错误发生在 antlr 内部,行如下所示:
self.strdata = unicode(data)
由于不想修改源代码, 我想传递一些可以接受的东西。
输入代码如下:
#!/usr/bin/python
import sys
import codecs
import antlr3
import antlr3.tree
from LatexLexer import LatexLexer
from LatexParser import LatexParser
char_stream = antlr3.ANTLRInputStream(codecs.getreader("utf8")(sys.stdin))
lexer = LatexLexer(char_stream)
tokens = antlr3.CommonTokenStream(lexer)
parser = LatexParser(tokens)
r = parser.document()
【问题讨论】:
-
请注意,正确用 TeX 以外的任何东西解析 TeX 几乎是不可能的。
-
PEP 8 推荐(以及大多数 Python 内容)小写的模块和包名称。
LatexLexer和LatexParser不在一个包中,这对我来说也很奇怪。 -
是的,但我只需要一个子集(LyX 的输出),并且我正在将现有的解析器从 Yappy 移植到 ANTLR。顺便说一句,antlr 从语法名称生成大写名称。 Java 约定....
标签: python unicode antlr stdin