如何在 shapefile (arcmap) 的属性 table 中用 'ss' 替换 'ß'? ASCII 错误

How can I replace 'ß' by 'ss' in an attribute table of a shapefile (arcmap)? ASCII error

我在 python 编码方面真的很新,所以请详细回答,不要太苛刻.. 我正在尝试用 'ss' 替换 shapefile 的属性 table 中的德语元音变音符 'ß' 并通过使用字段计算器来执行此操作,您可以在其中添加 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)

属性 table 的此字段中的街道名称是 'Zuccalistraße 21a',因此显然 ß 是超出 ASCII 范围的问题(那里 >number 200)。 我能做些什么来替换它? 我现在已经在互联网上搜索了 5 个小时....

很想得到一些答案! 亲切的问候, 艾拉

decodeencodereplace不工作in-place。尝试 test = test.decode('utf-8')test = test.encode('utf-8')test = test.replace("\xe1", "ss")

表示decodereplace行对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")

以您认为最易读的方式为准。

你也可以不 decode/encode 它而只做 test = test.replace(u"\xdf".encode("utf-8"), "ss")test = test.replace("ß", "ss") 但通常最好处理 unicode 对象所以我想说解码和编码是一个好的做法。

您可以将 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函数,而是return一个值,所以你需要将函数的 return 值赋给一个变量来生成你的代码。

还要注意上面声明的# 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

很明显,解码有问题。 当我尝试

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

我收到错误消息:

文件"C:\Python27\ArcGIS10.2\Lib\encodings\utf_8.py",第16行,解码中 return 编解码器。utf_8_decode(输入,错误,真)

UnicodeEncodeError: 'ascii' 编解码器无法对位置 11 中的字符 u'\xdf' 进行编码:序号不在范围内 (128)

现在我得到了问题的答案: 我发现当你输入

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

函数,它工作正常!! 所以感谢你试图帮助我,祝你有美好的一天:)

干杯, 艾拉