当前位置: 首页 > 面试题库 >

python csv unicode'ascii'编解码器无法在位置1编码字符u'\ xf6':序数不在范围内(128)

阳兴朝
2023-03-14
问题内容

我已经从[python网站] [1]复制了此脚本,这是另一个问题,但是现在编码存在问题:

import sqlite3
import csv
import codecs
import cStringIO
import sys

class UTF8Recoder:
    """
    Iterator that reads an encoded stream and reencodes the input to UTF-8
    """
    def __init__(self, f, encoding):
        self.reader = codecs.getreader(encoding)(f)

    def __iter__(self):
        return self

    def next(self):
        return self.reader.next().encode("utf-8")

class UnicodeReader:
    """
    A CSV reader which will iterate over lines in the CSV file "f",
    which is encoded in the given encoding.
    """

    def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
        f = UTF8Recoder(f, encoding)
        self.reader = csv.reader(f, dialect=dialect, **kwds)

    def next(self):
        row = self.reader.next()
        return [unicode(s, "utf-8") for s in row]

    def __iter__(self):
        return self

class UnicodeWriter:
    """
    A CSV writer which will write rows to CSV file "f",
    which is encoded in the given encoding.
    """

    def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
        # Redirect output to a queue
        self.queue = cStringIO.StringIO()
        self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
        self.stream = f
        self.encoder = codecs.getincrementalencoder(encoding)()

    def writerow(self, row):
        self.writer.writerow([s.encode("utf-8") for s in row])
        # Fetch UTF-8 output from the queue ...
        data = self.queue.getvalue()
        data = data.decode("utf-8")
        # ... and reencode it into the target encoding
        data = self.encoder.encode(data)
        # write to the target stream
        self.stream.write(data)
        # empty queue
        self.queue.truncate(0)

    def writerows(self, rows):
        for row in rows:
            self.writerow(row)

这次编码问题,当我运行它时,出现了这个错误:

Traceback (most recent call last):
  File "makeCSV.py", line 87, in <module>
    uW.writerow(d)
  File "makeCSV.py", line 54, in writerow
    self.writer.writerow([s.encode("utf-8") for s in row])
AttributeError: 'int' object has no attribute 'encode'

然后我将所有整数都转换为字符串,但是这次我得到了这个错误:

Traceback (most recent call last):
  File "makeCSV.py", line 87, in <module>
    uW.writerow(d)
  File "makeCSV.py", line 54, in writerow
    self.writer.writerow([str(s).encode("utf-8") for s in row])
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 1: ordinal not in range(128)

我已经在上面实现了处理Unicode字符的方法,但是它给了我这种错误。有什么问题以及如何解决?


问题答案:

然后我将所有整数都转换为字符串,

您将整数 字符串都转换为 字节字符串
。对于字符串,它将使用碰巧为ASCII的默认字符编码,当您具有非ASCII字符时,它将失败。您要unicode代替str

self.writer.writerow([unicode(s).encode("utf-8") for s in row])

最好在调用该方法之前将所有内容都转换为unicode。该类专门用于解析Unicode字符串。它并非旨在支持其他数据类型。



 类似资料:
  • 问题内容: 我想解析我的XML文档。所以我将我的XML文档存储如下 现在我的下面是我的代码 我低于错误 问题答案: 看来您要达到UTF-8字节顺序标记(BOM)。尝试使用此Unicode字符串并提取出BOM: 我使用而不是因为在您的情况下您可能多次出现BOM表,这可能是由于串联的文件内容引起的。

  • 我目前正在使用Django countries为表单字段获取ISO国家名称列表。它在我的网站上显示时没有错误,但在Django的管理网站上,由于存在非ASCII国家名称,它会导致上述错误: Unicode错误提示:无法编码/解码的字符串是:itan 我已经读到类似的问题可以通过属性来解决,但是如果不接触Django Admin本身,这似乎不是很可行。如果有人能解决这个问题,我将不胜感激。 Mode

  • 问题内容: 我在处理从不同网页(在不同站点上)获取的文本中的字符时遇到问题。我正在使用。 问题是该错误并不总是可重现的。它有时可以在某些页面上使用,有时它会通过抛出来发声。我已经尝试了几乎所有我能想到的东西,但是我没有发现任何能正常工作而不抛出某种与相关的错误的东西。 导致问题的代码部分之一如下所示: 这是运行上述代码段时在某些字符串上生成的堆栈跟踪: 我怀疑这是因为某些页面(或更具体地说,来自某

  • 问题内容: 当我尝试将其串联时,当字段包含“ñ”或“´”时,出现UnicodeDecodeError。如果包含“ñ”或“´”的字段是最后一个,则不会有任何错误。 任何想法?非常感谢! 问题答案: 您正在编码为UTF-8,然后 重新 编码为UTF-8。Python仅在首先再次 解码 为Unicode时才能这样做,但它必须使用默认的ASCII编解码器: 不要继续编码;将编码保留为UTF-8 到最后一个

  • 问题内容: 我正在尝试使用其中包含一些非标准字符的超大型数据集。根据工作规范,我需要使用unicode,但我感到困惑。(而且很可能做错了。) 我使用以下方式打开CSV: 然后,我尝试使用以下代码对其进行编码: 我正在对lat和lng以外的所有内容进行编码,因为它们需要发送到API。当我运行程序以将数据集解析为可以使用的数据时,将获得以下Traceback。 我想我应该告诉你我正在使用python

  • 问题内容: 在我的其中一台计算机上,当我使用Google Apps引擎或Django时出现错误。 例如: app.yaml demas1252c.py foto.html 错误信息: 当我在Django中使用静态文件(不带gae)时,我遇到了非常类似的错误(具有不同的堆栈)。 我试图找到错误的原因,并向mimetypes.py添加了代码: 然后,我在控制台中收到下一条消息: 在注册表HKCR /