我试图读取包含简体中文信息的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)Sublime Text无法理解中文字符,也就是说它不明白寻找家庭姓'在命令elif row[0] == '家长姓'
中。
2)Sublime Text似乎无法打印中文字符(当我告诉它打印一些信息时,所有中文字符都被下划线替换)。
我已经尝试了文件>使用编码保存> UTF-8无效。任何帮助将不胜感激。
答案 0 :(得分:1)
尝试使用codecs
使用适当的编码打开文件:
>>> import codecs
>>> f = codecs.open("testdata1.csv", "r", "utf-8")
答案 1 :(得分:1)
非ASCII字符总是难以使用,因为有3个不同的问题:
# -*- coding: ... -*-
)sys.encoding
将用于渲染它们首先,您的编码行忘记了-*-
,这意味着某些编辑可能无法正确处理编码。
您还可以尝试IDLE编辑器是否更容易处理中文字符。
但无论如何,如果其他一切都失败了,你总是可以使用显式的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字符时遇到问题,请使用其转义代码
答案 2 :(得分:1)
'家长姓'
是<type 'str'>
,您读取的内容也是<type 'str'>
,但也许他们的编码方法不一样。您可以将它们解码为比较前<type 'unicode'>
。
例如:
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