ArcPy と Python エンコーディングの間の奇妙な動作に直面しています。VS (PTVS) 用の Python ツールがインストールされた VisualStudio 2010 Shell を使用しています。簡単なスクリプト ファイルを使用して問題を切り分けました。次のコマンドを含む py スクリプト ファイル。VisualStudio では、« Advanced Save Options...» を « UTF-8 without signature » に設定しました。このスクリプトは、アクセント付きの文字列を画面に出力し、arcpy モジュールをインポートして、同じ文字列を再度出力します。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
元のタイプ: type 'unicode'
元のテキスト: Récuperation des données <--- これは正しい
import arcpy
ロードされたエンコーディング: utf-8
arcpy mess up オリジナル タイプ: type 'unicode'
arcpy mess up original text : R'cuperation des donn'es> <--- これは間違っています
arcpy 混乱 cp1252 での再エンコード type : type 'str'
arcpy 混乱 cp1252 での再エンコード text : Récuperation des données> <--- これは適合します元のユニコードで