arcgis10.7, 自带python2.7
乱码代码1:
# -*- coding: utf-8 -*-
import arcpy
msg = '中文'
arcpy.AddMessage(msg)
失败方案1:
# -*- coding: utf-8 -*-
import arcpy
msg = '中文'
msg_unicode = msg.decode('utf-8')
arcpy.AddMessage(msg_unicode)
失败方案2: 直接报错,而在python的idle中并不会报错
# -*- coding: utf-8 -*-
import arcpy
msg = '中文'
msg_unicode = msg.decode('utf-8')
msg_gbk = msg_unicode.encode('gbk')
arcpy.AddMessage(msg_gbk)
小结:只要编码声明是utf-8,无论怎么转码都没用,都会是乱码。
我不明白的是,居然会报错,这不应该报错的。还希望有大神赐教
我又修改了系统编码为utf-8,结果一样。
小结:arcgis软件在执行arcpy.AddMessage这个方法时,不受系统编码影响。
解决方案1:头文件的编码声明改成cp936(或者gbk):
# -*- coding: cp936 -*-
import arcpy
arcpy.AddMessage('中文')
解决方案2:去掉头文件的编码声明
import arcpy
arcpy.AddMessage('中文')
只要编码声明改成gbk,或者不带编码声明,即便将字符串编码成utf-8也能正常显示:
import arcpy
msg = u'中文'.encode('utf-8')
arcpy.AddMessage(msg)
小结1:arcpy.AddMessage方法依赖头文件的编码,不依赖代码中字符串的编码。
小结2:如果没有头文件,则默认为gbk。
总结1:arcpy.AddMessage方法不依赖系统编码,不依赖代码中字符串的编码,只依赖头文件的编码声明。
总结2:arcpy.AddMessage这个方法先将字符串转码成头文件”编码声明”的编码,再按gbk进行强制转码显示。
所以,想正常显示中文,最好的方案就是加头文件为gbk。
参考文章:
Windows系统修改系统编码
python中文编码与乱码问题解决
python中文编码与乱码问题解决 – 天祺围棋http://www.tianqiweiqi.com/python-utf-8.html