gpt4 book ai didi

Python:从标准输入读取时出现 UnicodeEncodeError

转载 作者:太空狗 更新时间:2023-10-29 22:07:19 28 4
gpt4 key购买 nike

当运行从标准输入读取的 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()

最佳答案

问题是,当从标准输入读取时,python 解码它使用系统默认编码:

>>> 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()

顺便说一句#2:对于我找到的字符串

a_string.encode(encoding) 

有用。

关于Python:从标准输入读取时出现 UnicodeEncodeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2467928/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com