Python csv.DictReader嵌入非unicode字符

Python csv.DictReader嵌入非unicode字符,python,csv,unicode,Python,Csv,Unicode,我正在尝试将csv导入python中的JSON: myjson = list() with open("stuff.csv","rU") as f: vals = csv.DictReader(f) for i in vals: myjson.append(i) 当我使用csv的DictReader()时,几乎每一条记录中都会出现看似无效的unicode字符,例如: \xc9 …在文本字段中。据我所知,这是一个有效的unicode字符倒置的e。但是,由于它嵌入

我正在尝试将csv导入python中的JSON:

myjson = list()
with open("stuff.csv","rU") as f:
    vals = csv.DictReader(f)
    for i in vals:
        myjson.append(i)
当我使用csv的DictReader()时,几乎每一条记录中都会出现看似无效的unicode字符,例如:

\xc9
…在文本字段中。据我所知,这是一个有效的unicode字符倒置的e。但是,由于它嵌入到较长的字符串中,因此看起来这实际上是未编码的,并且整个键是str类型而不是unicode类型


我假设这是我得到的数据输入或csv模块的遗物,但是是否有任何标志、标记或其他读取csv的方法可以通过转换适当地处理这一问题?

您正在查看Python字符串文本。
\xc9
序列是转义码,Python将其用于任何不可打印的代码点或128码点之上的代码点。对于超过255的代码点,将使用转义序列

默认情况下,Python将打印容器中包含的值的表示形式,例如列表或字典。unicode值的表示形式(
repr()
function result)打印为python字符串文字:

>>> print [u'Hello: \xc9']
[u'Hello: \xc9']
>>> print [u'Hello: \xc9'][0]
Hello: É

那么,我真的很难理解其中的文档。这意味着我的字符串是unicode还是非unicode?另外,为什么当我尝试对这些数据执行任何需要有效unicode的操作时,都会失败?我的理解是python在默认情况下是unicode原生的,对吗?@Mittenchops:这些字符串文字是用
u'
表示的还是没有前缀?@Mittenchops:python基本上是unicode感知的,但是如果你混合使用unicode和字节字符串值,事情很快就会变得糟糕(自动强制很少是个好主意)。你需要为我创建一个新问题来解决你的具体问题。谢谢你,Martijn,但我恐怕还是完全不确定我的问题是什么——看看文档,它似乎没有包含任何无效内容,转义序列也看起来有效,对吗?我不知道我的数据有什么问题,很多功能认为这是无效的,或者如何修复它,或者首先读它更好。你使用Python 2还是3?Python 2以
u''
作为前缀,但CSV模块处理字节字符串,而不是Unicode。在Python3中,您会得到Unicode值,这是默认值,您不会得到
u''
前缀。如果您使用的是Python 2,并且在字节字符串中看到
\xc9
,那么您可能看到的是拉丁语1编码的文本。