我在这一行遇到了一个烦人的错误:
r += '\n<Placemark><name>'+row[3].encode('utf-8','xmlcharrefreplace')+'</name>' \
'\n<description>'+desc.encode('utf-8','xmlcharrefreplace')+'</description>\n' \
'<Point><coordinates>'+row[clat].encode('utf-8','xmlcharrefreplace')+
','+row[clongitude].encode('utf-8','xmlcharrefreplace')+'</coordinates></Point>\n' \
'<address>'+row[4].encode('utf-8','xmlcharrefreplace')+'</address>\n' \
'<styleUrl>'+row[cstyleID].encode('utf-8','xmlcharrefreplace')+'</styleUrl>\n' \
'</Placemark>'
这里有一个错误:
Traceback (most recent call last):
File "<pyshell#38>", line 1, in <module>
doStuff()
File "C:\Python27\work\GenerateKML.py", line 5, in doStuff
createFiles('together.csv')
File "C:\Python27\work\GenerateKML.py", line 55, in createFiles
'<styleUrl>'+row[cstyleID].encode('utf-8','xmlcharrefreplace')+'</styleUrl>\n' \
UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 60: ordinal not in range(128)
我做错了什么?
谢谢你的帮助。
以下是完整的源代码:
import hashlib
import csv
def doStuff():
createFiles('together.csv')
def readFile(fileName):
a=open(fileName)
fileContents=a.read()
a.close()
return fileContents
def readCSVFile(fileName):
return list(csv.reader(open(fileName, 'rb'), delimiter=',', quotechar='"'))
def GetDistinctValues(theFile, theColumn):
with open(theFile, "rb") as fp:
reader = csv.reader(fp)
return list(set(line[theColumn] for line in reader))
def createFiles(inputFile):
cNAME=3
clat=0
clongitude=1
caddress1=4
caddress2=5
cplace=6
ccity=7
cstate=8
czip=9
cphone=10
cwebsite=11
cstyleID=18
inputFileText=readCSVFile(inputFile)
headerFile = readFile('header.txt')
footerFile = readFile('footer.txt')
r=headerFile
DISTINCTCOLUMN=12
dValues = GetDistinctValues(inputFile,DISTINCTCOLUMN)
counter=0
for uniqueValue in dValues:
counter+=1
print uniqueValue
theHash=hashlib.sha224(uniqueValue).hexdigest()
for row in inputFileText:
if uniqueValue==row[DISTINCTCOLUMN]:
for eachElement in row:
eachElement=eachElement.replace('&','&')
desc = ' '.join(row[3:])
r += '\n<Placemark><name>'+row[3].encode('utf-8','xmlcharrefreplace')+'</name>' \
'\n<description>'+desc.encode('utf-8','xmlcharrefreplace')+'</description>\n' \
'<Point><coordinates>'+row[clat].encode('utf-8','xmlcharrefreplace')+
','+row[clongitude].encode('utf-8','xmlcharrefreplace')+'</coordinates></Point>\n' \
'<address>'+row[4].encode('utf-8','xmlcharrefreplace')+'</address>\n' \
'<styleUrl>'+row[cstyleID].encode('utf-8','xmlcharrefreplace')+'</styleUrl>\n' \
'</Placemark>'
r += footerFile
f = open(theHash+'.kml','w')
f.write(r)
f.close()
r=headerFile
for eachElement in row
循环不会改变row
。 - jfsrow
。请注意,即使其中有&
,row
也不会改变。 - jfsrow[cstyleID]
吗?周围会不会有非ASCII字符(如果异常是UnicodeDecodeError
,那么应该涉及Unicode或ASCII的问题,对吧?)?你应该尝试确保它是Unicode编码的。 - Pierre GM