我在这一行上遇到了这个令人讨厌的错误:
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
答案 0 :(得分:5)
您可能正在尝试编码字节。在这种情况下,Python首先使用默认编码(ASCII)对字节进行解码,然后使用您提供的编码对结果Unicode字符串进行编码。
解决方案是:不对字节进行编码,即仅对Unicode字符串使用encode()
。在你的情况下,根本不要使用它。
要创建有效的XML文档,您可以使用xml.etree.ElementTree module。