如何在shapefile(arcmap)的属性表中将“ß”替换为“ ss”? ASCII错误

时间:2019-05-14 14:13:20

标签: python python-2.7 arcmap

我真的是python编码的新手,所以请详细回答,不要太苛刻。 我正在尝试用'ss'替换shapefile的属性表中的德语变音符'ß',并通过使用字段计算器来执行此操作,您可以在其中添加python代码块。

这是我到目前为止尝试过的:

def ecode(file, name, test):
    test.decode("utf-8")
    test.replace("\xe1", "ss")
    test.encode("utf-8")
    return test

我还使用了“ U + 00DF”和“ \ xdf”来代替“ \ xe1”。

会出现此错误消息:

错误:ASCII编解码器无法在位置11编码字符u'\ xdf':序数不在范围(128)中

属性表的此字段中的街道名称为“Zuccalistraße21a”,因此很明显,ß是超出ASCII范围的问题(> 200)。 我该怎么做才能替换它? 我已经在互联网上搜索了5个小时。...

希望得到一些答案! 亲切的问候, 艾拉

3 个答案:

答案 0 :(得分:1)

#!/usr/bin/python3 import sys primary_numbers = [1, 2] def is_prime(i): response = True for pn in enumerate(primary_numbers[2:]): if i % pn[1] == 0: response = False return response def main(position): i = 2 while i < int(position): res = is_prime(i) if res: primary_numbers.append(i) i += 1 if __name__ == '__main__': position = sys.argv[1] main(position) print ("The prime number #{pos} position is {prime}".format(pos=position,prime=primary_numbers[-1])) 以及decodeencode不能就地工作。尝试replacetest = test.decode('utf-8')test = test.encode('utf-8')

这意味着test = test.replace("\xe1", "ss")decode行对replace无效。然后,第三行尝试test对象, 但尚未解码,因此无法正常工作。

也就是说,那之后您仍然会有问题。这就是我要做的:

encode

test = test.decode("utf-8")
test = test.replace(u"\xdf", "ss")
test = test.encode("utf-8")

对您而言最易读的那个。

您也无法对其进行解码/编码,而只进行test = test.decode("utf-8") test = test.replace(u"ß", "ss") test = test.encode("utf-8") test = test.replace(u"\xdf".encode("utf-8"), "ss"),但通常最好处理test = test.replace("ß", "ss")对象,因此我认为解码和编码是一种好习惯。 / p>

答案 1 :(得分:1)

您可以将casefoldcapitalize的组合用于python3

In [6]: s = 'Zuccalistraße 21a'                                                                                                               

In [7]: s.casefold()                                                                                                                          
Out[7]: 'zuccalistrasse 21a'

In [8]: s.casefold().capitalize()                                                                                                             
Out[8]: 'Zuccalistrasse 21a'

对于python2,函数decodereplaceencode不是in-place函数,但是它们返回一个值,因此您需要分配将函数的值返回给变量以编写代码。

还要注意上面声明的# coding=utf-8。这符合PEP-263

# coding=utf-8

s = 'Zuccalistraße 21a'
s = s.decode("utf-8").replace(u"\xdf", "ss").encode("utf-8")
print(s)

输出将为

Zuccalistrasse 21a

答案 2 :(得分:0)

很明显,这是解码的问题。 当我尝试

def ecode(file, name, test):
    test=test.decode("utf-8")
    test=test.replace(u"\xdf", "ss")
    test=test.encode("utf-8")
    return test

我收到错误消息:

第16行的文件“ C:\ Python27 \ ArcGIS10.2 \ Lib \ encodings \ utf_8.py”在解码中 返回codecs.utf_8_decode(input,errors,True)

UnicodeEncodeError:'ascii'编解码器无法在位置11编码字符u'\ xdf':序数不在范围内(128)

现在我得到了这个问题的答案: 我发现,当您输入

import sys
reload(sys)
sys.setdefaultencoding("utf8")

该功能正常运行!! 因此,感谢您为我提供的帮助,祝您愉快:)

干杯, 艾拉