这是一篇绕行方案,主要实现的是让大家在使用run python script的时候,可以给结果正确的添加新的中文字段。
具体问题描述:
在run python script中给结果添加新字段,字段是中文的话,会报以下编码错误:
{"messageCode":"BD_101138","message":"[Python] UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 261: illegal multibyte sequence","params":{"text":"UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 261: illegal multibyte sequence"}}
导致错误的关键代码: newfield = "测试字段"
导致问题的原因:gbk的编码支持部分中文,所以出现“测试字段”报错,但是如果使用“测”正常。
绕行方案:
将中文字段名转换为 utf-8 bytestring 格式写入代码中。可以使用一些在线的转换器直接生成。
示例:
我将“测试字段”四个字转换,所以上述报错的代码被改写成:
newfield = b'\xe6\xb5\x8b\xe8\xaf\x95\xe5\xad\x97\xe6\xae\xb5'.decode("utf-8")
这样的话,运行成功,且结果中字段显示正常。
附件1:
我使用的在线转换器地址
https://mothereff.in/utf-8
附件2:
我的测试代码如下
input = "https://ga.esri.local/arcgis/r ... ot%3B
input_df = spark.read.format("webgis").load(input)
expressionStr = "When($feature.CC==0719,0,1)"
//newfield = "测试字段"替换成以下代码便可成功执行
newfield = b'\xe6\xb5\x8b\xe8\xaf\x95\xe5\xad\x97\xe6\xae\xb5'.decode("utf-8")
result = geoanalytics.calculate_field(input_layer = input_df , field_name = newfield, data_type = "Double", expression = expressionStr , track_aware = None, track_fields = None, time_boundary_split = None, time_boundary_split_unit = None, time_boundary_reference = None)
result.write.format("webgis").save("chinesecharactertest")