如何在 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 个小时....
很想得到一些答案!
亲切的问候,
艾拉
decode
,encode
和replace
不工作in-place。尝试 test = 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")
以您认为最易读的方式为准。
你也可以不 decode/encode 它而只做 test = test.replace(u"\xdf".encode("utf-8"), "ss")
或 test = test.replace("ß", "ss")
但通常最好处理 unicode
对象所以我想说解码和编码是一个好的做法。
您可以将 casefold
和 capitalize
组合用于 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
,函数decode
、replace
和encode
不是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")
函数,它工作正常!!
所以感谢你试图帮助我,祝你有美好的一天:)
干杯,
艾拉
我在 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 个小时....
很想得到一些答案! 亲切的问候, 艾拉
decode
,encode
和replace
不工作in-place。尝试 test = 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")
以您认为最易读的方式为准。
你也可以不 decode/encode 它而只做 test = test.replace(u"\xdf".encode("utf-8"), "ss")
或 test = test.replace("ß", "ss")
但通常最好处理 unicode
对象所以我想说解码和编码是一个好的做法。
您可以将 casefold
和 capitalize
组合用于 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
,函数decode
、replace
和encode
不是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")
函数,它工作正常!! 所以感谢你试图帮助我,祝你有美好的一天:)
干杯, 艾拉