在Python中读取/编码CSV文件中的汉字

在Python中读取/编码CSV文件中的汉字,python,csv,encoding,utf-8,Python,Csv,Encoding,Utf 8,我正在尝试读取一个包含简体中文信息的CSV文件,并将其编码为一个请求,以放入数据库 我的代码部分: #coding:utf-8 import csv, sys, urllib, urllib2 with open('testdata1.csv', 'rU') as f: reader = csv.reader(f) try: z = csv.reader(f, delimiter='\t') for row in reader:

我正在尝试读取一个包含简体中文信息的CSV文件,并将其编码为一个请求,以放入数据库

我的代码部分:

#coding:utf-8    
import csv, sys, urllib, urllib2

with open('testdata1.csv', 'rU') as f:
    reader = csv.reader(f)
    try:
        z = csv.reader(f, delimiter='\t')
        for row in reader:
            print row[0]
            if row[0] in (None, ""): 
                continue
            elif row[0] == '家长姓': 
                print row[0]
然而,我遇到了两个问题:

1) 崇高的文字无法理解汉字,也就是说,它无法理解寻找家长姓' 在命令
elif行[0]='家长姓'

2) 升华文本似乎无法打印汉字(当我告诉它打印一些信息时,所有汉字都被下划线取代)


我已经尝试过文件>编码保存>UTF-8,但没有成功。如有任何帮助,将不胜感激。

请尝试使用具有适当编码的
编解码器打开文件:

>>> import codecs
>>> f = codecs.open("testdata1.csv", "r", "utf-8") 

非ASCII字符总是很难使用,因为存在3个不同的问题:

  • 系统和编辑器必须能够显示它们
  • 必须指定源文件的编码(
    #-*-编码:…-*-
    在第一行或第二行)
  • 所有这些都与系统编码无关(
    sys.encoding
    ),系统编码将用于呈现它们
首先,您的编码行忘记了
-*-
,这意味着某些编辑器可能无法正确处理编码

您还可以尝试空闲编辑器是否更容易处理汉字

但无论如何,如果其他方法都失败,您始终可以使用显式unicode代码:

>>> txt = u'家长姓' # only works if editor and interpretor were correctly declared the source encoding
>>> txt2 = u'\xe5\xae\xb6\xe9\x95\xbf\xe5\xa7\x93' # works on any system
>>> txt == txt2
True

TL/DR:如果在Python源代码中使用非ASCII字符有问题,请使用它们的转义代码家长姓'是一个
,您从中读取的内容也是一个
,但可能它们的编码方法不同。在比较之前,您可以将它们解码为

例如:

row[0].decode('utf-8') == u'家长姓'
下面是一个关于str和unicode的测试:

test = '你好'
test1 = u'你好'
print type(test)
print type(test1)
print test == test1
print type(test.decode('utf-8'))
print test.decode('utf-8') == test1
输出:

<type 'str'>
<type 'unicode'>
False
<type 'unicode'>
True

假的
真的