我在这行遇到了这个讨厌的错误:
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:Python27workGenerateKML.py", line 5, in doStuff
createFiles('together.csv')
File "C:Python27workGenerateKML.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
您可能正在尝试对字节进行编码。在这种情况下,Python首先使用默认编码(ASCII)对字节进行解码,然后使用您提供的编码对结果Unicode字符串进行编码。
解决方案是:不要对字节进行编码,即只对Unicode字符串使用encode()
。在你的情况下,根本不要使用它。
要创建有效的XML文档,可以使用XML.etree.ElementTree模块。