的Python:从标准
问题描述:
读取数据时运行的Python程序,从标准输入读取时UnicodeEncodeError,我得到以下错误:的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()
答
的问题是,从标准输入读取数据时,蟒蛇使用系统默认的编码进行解码 :
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
输入很可能UTF-8或Windows-CP-1252,所以程序 扼流圈上非ASCII字符。
要sys.stdin转换为用适当的解码器的流,我用:
import codecs
char_stream = codecs.getreader("utf-8")(sys.stdin)
这解决了这一问题。
顺便说一句,这是ANTLRs的FileStream用来打开文件 与给定文件名(而不是一个给定的流)的方法:
fp = codecs.open(fileName, 'rb', encoding)
try:
data = fp.read()
finally:
fp.close()
BTW#2:对于字符串我发现
a_string.encode(encoding)
有用。
答
您在输入时没有收到此错误,您在尝试输出读取数据时遇到此错误。您应该解码您读取的数据,并且将这些unicodes放在周围,而不是一直处理字节串。
+0
是的,但我在这里处理外国代码 – hansfbaier 2010-03-20 02:23:35
什么是你输入的代码? – kennytm 2010-03-18 06:38:03
我在上面添加了它.... – hansfbaier 2010-03-18 06:54:49
请注意*正确*解析TeX与除TeX之外的其他任何东西都将是不可能的。 – 2010-03-18 07:06:41