Windows で Python 2.5 を使用するアプリケーションがあります。データを取得するために WScript にシェルアウトします。返されるデータには多くの言語のコンテンツが含まれている可能性があるため、Unicode データの取得をサポートする必要があります。
Windows 8 より前では、これは問題なく機能していました。ただし、Windows 8 では、Unicode 応答を要求しても Python プログラムにデータが返されません。CScript 呼び出しのコマンド ライン バージョンは引き続き機能します。
問題を示す簡略化された Python スクリプトを次に示します。
import subprocess
cmd = ["cscript","//NoLogo","//U","testscript.js"]
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
proc = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, close_fds=False, startupinfo=startupinfo)
(sout, serr) = proc.communicate()
print repr(sout)
testscript.js
1 行を含む単純な WScript ファイル (UCS-2 エンコード ファイルとして保存) は次のとおりです。
WScript.Echo("Test 日本語");
これを Windows XP、Windows Vista、または Windows 7 で実行すると、正しく印刷されます
'T\x00e\x00s\x00t\x00 \x00\xe5e,g\x9e\x8a\r\x00\n\x00'
これを Windows 8 で実行すると、'' が出力されます (出力が空の文字列であるため)。CScript の呼び出しから "//U" パラメータを削除すると、'Test ???\r\n' が返されますが、これは Unicode データを取得するのにはあまり役に立ちません。
subprocess.Popen
Windows 8で Python から Unicode の結果を取得する方法を知っている人はいますか? このコードが最初に書かれたときの最新バージョンだったので、私は Python 2.5 を使用しています。Python 2.7.3 でこれを試しましたが、同じ問題があります。