我是python的新手,我已经发现了大量有关编码和UnicodeEncodeError的问题和答案,但我无法弄清楚我的具体问题并不断收到此错误:“ UnicodeEncodeError: 'ascii'编解码器无法编码位置7中的字符u'\ xf8':序数不在范围内(128)“。我正在使用IDLE Python 2.7.12
我想将arcGis工具TopoToRaster用于一组ca. 200个湖泊。我有一个包含200个文件夹的文件夹(每个湖泊一个),在每个湖文件夹中有三个形状文件,名称为lakename_P.shp用于点,lakename_B.shp用于多边形/边界,lakename_L.shp用于折线。湖泊是丹麦湖泊,因此几乎所有湖泊都包含文件夹名称和shp名称中的ø,æ和/或å。
我正在使用for循环遍历单个文件夹,并为每个湖运行该工具,并将正确的要素类作为输入。
我找到了这个代码,它实际上与我的代码一起使用,但是我不能用它打印任何东西,我也知道这些不利因素,所以我想避免它。
import sys
reload(sys)
sys.setdefaultencoding('utf8')
其他解决方案在读取和写入文件时使用.encoding,我实际上并没有这样做。
任何人都可以推荐除reload(sys)之外的解决方案。也许我只需将.encoding放在某处,但我真的不知道在哪里以及如何。我感谢你的每一个帮助,但我想提一下,我已经阅读了所有的Python Unicode HOWTO和其他博客文章。
-*- coding: iso-8859-15 -*-
import arcpy
from arcpy import env
from arcpy.sa import *
path = "//projects/soer"
arcpy.env.workspace = path
arcpy.env.overwriteOutput = True
# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")
wss = arcpy.ListWorkspaces("*", "Folder")
wss.sort()
for ws in wss:
arcpy.env.workspace = ws
for polygon in arcpy.ListFeatureClasses(feature_type = "Polygon"):
myBoundary = polygon
for point in arcpy.ListFeatureClasses(feature_type = "Point"):
myPoint = point
for polyline in arcpy.ListFeatureClasses(feature_type = "Polyline"):
myContour = polyline
output = ws + '/' + 'ttr'
outTTR = TopoToRaster([TopoPointElevation([[myPoint, 'z']]),
TopoContour([[myContour, 'z']]),
TopoBoundary([myBoundary])], 2,
"#", "#", "#", "#", "NO_ENFORCE")
outTTR.save(output)
答案 0 :(得分:1)
我终于设法自己解决了它,就像那样容易:
for polygon in arcpy.ListFeatureClasses(feature_type = "Polygon"):
myBoundary = polygon.encode('utf-8')
for point in arcpy.ListFeatureClasses(feature_type = "Point"):
myPoint = point.encode('utf-8')
for polyline in arcpy.ListFeatureClasses(feature_type = "Polyline"):
myContour = polyline.encode('utf-8')