UnicodeDecodeError:“ascii”编解码器无法解码字节。。。Python 2.7和

2024-10-01 11:40:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在阅读一个文本文件,其中包含来自许多不同国家的unicode字符。文件中的数据也是JSON格式的。在

我在一台CentOS机器上工作。当我在终端中打开文件时,unicode字符显示得很好(因此我的终端配置为unicode)。在

当我在Eclipse中测试代码时,它工作得很好。当我在终端中运行代码时,它会抛出一个错误: UnicodeDecodeError:“ascii”编解码器无法解码位置17中的字节0xc3:序号不在范围内(128)

for line in open("data-01083"):
    try:
        tmp = line
        if tmp == "":
            break
        theData = json.loads(tmp[41:]) 

        for loc in theData["locList"]:
            outLine = tmp[:40] 
            outLine = outLine + delim + theData["names"][0]["name"]
            outLine = outLine + delim + str(theData.get("Flagvalue"))
            outLine = outLine + delim + str(loc.get("myType"))
            flatAdd = ""
            srcAddr = loc.get("Address")
            if srcAddr != None:
                flatAdd = delim + str(srcAddr.get("houseNumber"))
                flatAdd = flatAdd + delim + str(srcAddr.get("streetName"))
                flatAdd = flatAdd + delim + str(srcAddr.get("postalCode"))
                flatAdd = flatAdd + delim + str(srcAddr.get("CountryCode"))
            else:
                 flatAdd = delim + "None" + delim + "None" + delim +"None" + delim +"None" + delim +"None"

            outLine = outLine + FlatAdd

            sys.stdout.write(("%s\n" % (outLine)).encode('utf-8'))
    except:
        sys.stdout.write("Error Processing record\n")

所以一切都正常,直到它到达StreetName,在那里它与UnicodeDecodeError崩溃,这是非ascii字符开始出现的地方。在

我可以通过added.encode('utf-8')修复该实例:

^{pr2}$

但是,它在下一行中与UnicodeDecodeError一起崩溃:

outLine = outLine + FlatAdd

一个月来,我一直在犹豫这类问题。如有任何反馈,我们将不胜感激!!在


Tags: 文件none终端getunicode字符loctmp
2条回答

这也许能解决你的问题。我是说可能是因为编码有时会让奇怪的事情发生;)

#!/usr/bin/python
# -*- coding: utf-8 -*-

text_file_utf8 = text_file.encode('utf8')

从这一点上你应该删除的信息。如果不是这样的话,请反馈你有什么样的文件,语言。可能是一些文件头数据。在

text_file.decode("ISO-8859-1")也可能是一个解决方案。在

如果全部失败,请在此处查看codecs()http://docs.python.org/2/library/codecs.html

^{pr2}$

Robᵩ(http://nedbatchelder.com/text/unipain.html)的演示确实有助于我理解unicode。强烈推荐给任何有unicode问题的人。在

我的外卖:

  • 将everthing转换为unicode,并将其输入到应用程序中。在
  • 在代码中只使用unicode字符串
  • 从应用程序输出数据时指定编码。在

对我来说,我正在从stdin读取一个文件并输出到stdout:

对于stdin:

inData = codecs.getreader('utf-8')(sys.stdin)

对于文件:

^{pr2}$

对于stdout(在向stdout写入任何内容之前执行此操作一次):

sys.stdout = codecs.getwriter('utf-8')(sys.stdout)

相关问题 更多 >