我已经从[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 /