2016-10-18 6 views
0

スクリプトを使用して、.NETプロジェクトの各AssemblyVersion.csファイルのバージョンを更新します。それはいつも完璧に動作しましたが、私のPCのフォーマット以来、編集された各.csファイルの先頭にユニコード文字が追加されます。 ioの代わりcodecsを、使用するために、hereを書きましたが、何も変更されていないとして、Pythonはファイルの先頭にUnicode文字を追加します。

with open(fname, "r") as f: 
    out_fname = fname + ".tmp" 
    out = codecs.open(out_fname, "w", encoding='utf-8') 
    textInFile="" 
    for line in f: 
     textInFile += (re.sub(pat, s_after,line)) 
    out.write(u'\uFEFF') 
    out.write(textInFile) 
    out.close() 
os.remove(fname) 
os.rename(out_fname, fname) 

私も試してみた:次のように:

using System.Reflection; 
using System.Runtime.InteropServices; 
using System.Security; 

私は、ファイルを開くには、このコードを使用します。

他のチームメイトのPCでは、同じ設定(Win10およびIronPython 2.7)で動作します。

この問題を解決するにはどうすればよいですか?どこで問題を探すことができますか?

おかげ

答えて

0

あなたが、各ファイルの先頭にBOM UT8マーカーを追加している間、あなたのファイルシステムではファイルは、ISO-8859-1エンコーディングを使用しているようです。

コードを実行した後は、最初にUTF-8 BOM + ISO-8859-1メタでファイルが取得されます。

私が記述したシナリオが有効かどうかを確認するために、メモ帳++(または他のエディタ)で変更する前に入力ファイルのエンコーディングをチェックします。それがある場合は、メタデータを避けるために、異なるエンコーディングを使用して入力ファイルを読み込む必要があります:

with open(fname, "r", "ISO-8859-1") as f: 
    ... 
+0

申し訳ありませんが、私は遅刻場合。ただし、処理されるファイルのエンコーディングはUTF-8 BOMです(具体的には、これらのファイルは.NETプロジェクトのAssemblyInfo.csです)。私はまたあなたが指定したように "ISO-8859-1"を読み書きメソッドに追加しようとしましたが、動作しません。 – Krusty

+0

処理しているファイルがUTF-8 BOMの場合は、通常の 'utf-8'ではなく 'utf-8-sig'エンコーディングを使用する必要があります。たぶんそれは問題です。通常のUTF-8ファイルのように読んでいるので、BOMマーカーは、手作業で書いたBOMを持つファイルの先頭に読み込まれ、追加されます。 – n3m4nja

+0

この方法で試しましたが、まだ動作しません。 f: out_fname = fname + ".tmp"out = codecs.open(out_fname、 " w "、encoding = 'utf-8-sig')' 他の提案はありますか? – Krusty

関連する問題