2013-07-16 30 views
0

我试图导入CSV到JSON在Python:Python的csv.DictReader嵌入非Unicode字符

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的方式来处理这种转换?

回答

0

您正在查看Python字符串文字。 A \xc9序列是一种转义代码,Python用于任何不可打印或代码点128以上的代码点。对于255以上的代码点,将使用\uxxxx转义序列。

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

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

然后,我仍然很难理解此文档。这是否意味着我的字符串是unicode,还是不是unicode?另外,为什么当我试图对这个期望有效的unicode的数据做任何事情时,它会失败?我的理解是python默认是unicode native,对吧? – Mittenchops

+0

@Mittenchops:这些字符串是否带有'u'''或没有前缀? –

+0

@Mittenchops:Python在很大程度上是unicode知道的,但是如果混合使用unicode和字节字符串值,事情会变得很难看(自动强制几乎不是一个好主意)。您需要针对您的具体问题创建一个新问题,以便我能够提供帮助。 –