矢量大数据(Geoanalytics Server)之如何在runpythonscript中书写中文字段

1
分享 2020-05-19
这是一篇绕行方案,主要实现的是让大家在使用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")


 

1 个评论

这个问题在109版本上修复了。

要回复文章请先登录注册