Windows 7 で Python 2.7 を使用して、utf-8 でエンコードされた Windows バッチ ファイルを実行しようとすると、バッチ ファイルの最初のコマンドが認識されません (例を参照)。
ほとんどの場合、bom は文字として解釈されます。基になるシェルでバッチ ファイルを適切に実行するにはどうすればよいですか?
呼び出されたバッチ ファイルは、サード パーティからのものです。問題を再現する簡単な python スクリプトを次に示します。
import codecs
import subprocess
content = "@echo off"
with codecs.open('test_utf8.bat', 'w', 'utf-8-sig') as f:
f.write(content)
f.close()
with open('test_ansi.bat', 'w') as f:
f.write(content)
f.close()
print "Calling test_ansi.bat"
subprocess.call('test_ansi.bat', shell=True)
print "Calling test_utf8.bat"
subprocess.call('test_utf8.bat', shell=True)
print "Done"
スクリプトを実行すると、次の出力が得られます
t:\tmp\test>python test.py
Calling test_ansi.bat
Calling test_utf8.bat
t:\tmp\test>´╗┐@echo off
'´╗┐@echo' is not recognized as an internal or external command,
operable program or batch file.
Done
t:\tmp\test>
注意として、shell
パラメータは何の効果もないようです。