我面臨ArcPy和Python編碼之間的奇怪行爲。我使用VisualStudio 2010 Shell與安裝了VS(Python的PTVS)的Python工具一起工作。我通過一個簡單的腳本文件隔離了我的問題。包含以下命令的py腳本文件。在VisualStudio中,我已將「高級保存選項...」設置爲「無簽名」的「UTF-8」。該腳本只是在屏幕上打印重音字符串,然後導入arcpy模塊,然後再次打印相同的字符串。導入Arcpy似乎改變了Python編碼設置,但我不知道爲什麼,我想正確地重新安裝它,因爲它會在原始腳本中的任何地方造成一些問題。ArcPy和Python編碼搞亂了嗎?
我檢查了python«encoding»文件夾並刪除了每個pyc文件。比我跑的腳本,它生成的3個PYC文件:
- cp850.pyc(相當於我stdout.encoding)
- cp1252.pyc(相當於我的Windows環境下的編碼)
- UTF_8 .pyc(適合我的腳本編碼)
當ArcPy被導入時,某些內容會改變影響初始變量的編碼。
爲什麼?
是否有可能通過一些Python命令找到ArcPy編碼cp1252所在的位置並讀取它,以便我可以創建一個處理它的函數?
# -*- coding: utf-8 -*-
import sys
print ('Loaded encoding : %(t)s'%{'t':sys.getdefaultencoding()})
reload(sys) # See stackoverflow question 2276200
sys.setdefaultencoding('utf-8')
print ('Set default encoding : %(t)s'%{'t':sys.getdefaultencoding()})
print ''
texte = u'Récuperation des données'
print ('Original type : %(t)s'%{'t':type(texte)})
print ('Original text : %(t)s'%{'t':texte})
print ''
import arcpy
print ('imported arcpy')
print ('Loaded encoding : %(t)s'%{'t':sys.getdefaultencoding()})
print ''
print ('arcpy mess up original type : %(t)s'%{'t':type(texte)})
print ('arcpy mess up original text : %(t)s'%{'t':texte})
print ''
print ('arcpy mess up reencoded with cp1252 type : %(t)s'%{'t':type(texte.encode('cp1252'))})
print ('arcpy mess up reencoded with cp1252 text : %(t)s'%{'t':texte.encode('cp1252')})
raw_input()
,當我運行該腳本,我得到這些結果:
加載編碼:ASCII
集編碼:UTF-8
原始型: 'unicode' 時
原始文本:Récuperationdesdonnées < ---這是正確的
進口ArcPy中
加載編碼:UTF-8
ArcPy中弄亂原始類型:類型碼爲
ArcPy中弄亂原文:R'cuperation DES donn'es> < - - 這是錯誤
ArcPy中亂了重新編碼與CP1252型:「海峽」
ArcPy中亂了重新編碼與CP1252文字:調養宮最近搜索> < ---這是符合與初始unicode