3

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 ファイルが生成されました。

  1. cp850.pyc (これは私の stdout.encoding に対応します)
  2. cp1252.pyc (私の Windows 環境のエンコーディングに対応)
  3. 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>    <--- これは適合します元のユニコードで

4

2 に答える 2

0

疑問がある場合は、次のようなことを試してください (たとえば、.py ファイルで):

import codecs
#import arcpy

f = codecs.open('utf.file.txt', encoding='utf-8-sig') #assuming a BOM present
l = f.readlines()
print u''.join(l)

次に、同じコードをもう一度実行しますが、最初に arcpy 行からハッシュ コメントを削除します。あと6秒くらいかかります。

私が得たのは、最初のバージョンを実行している完全に細かいテキストであり、arcpy の読み込みを許可すると意味不明です。

使用した ArcGIS for Desktop のバージョン: 10.2.1

于 2015-02-04T10:08:40.973 に答える