stackoverflow と python 2.7 doc を数日間検討した後、私はこれについて結論に達しませんでした。
基本的に、テキストブロックを入力する必要があるWindowsサーバーでpythonスクリプトを実行しています。このテキスト ブロックは (残念ながら)パイプで渡す必要があります。何かのようなもの:
PS > [something_that_outputs_text] | python .\my_script.py
問題は次のとおりです。
サーバーは cp1252 エンコーディングを使用していますが、管理上の規制などにより変更できません。?
そして、テキストをPythonスクリプトにパイプすると、それを読むと、文字が本来ある\xe1
べきなのに、すでに付いています。
私がこれまでに行ったこと:
UTF-8 でテスト済み。うん、chcp 65001
そして$OutputEncoding = [Console]::OutputEncoding
「それを解決」してください。Pythonのように、テキストを完全に取得し、それをユニコードなどにデコードできます。
一体何が起こっているのかをテストするための小さなスクリプト:
import codecs
import sys
def main(argv=None):
if argv is None:
argv = sys.argv
if len(argv)>1:
for arg in argv[1:]:
print arg.decode('cp1252')
sys.stdin = codecs.getreader('cp1252')(sys.stdin)
text = sys.stdin.read().strip()
print text
return 0
if __name__=="__main__":
sys.exit(main())
codecs
ラッピングありとなしの両方で試してみました。
私の入力と出力:
PS > echo "Blá" | python .\testinput.py blé
blé
Bl?
--> したがって、引数 (blé) には問題はありませんが、パイプされたテキスト (Blá) は良くありません :(
私は文字列を16進数に変換しましたが、そうです、 (別名 mr )でtext
溢れているので、.3f
?
print
[また: これは私の最初の質問です... 私が何をしたかについて、さらに詳しい情報をお気軽にお尋ねください]
編集
これが関連しているかどうかはわかりませんが、実行sys.stdin.encoding
すると結果が得られますNone
更新:だから... cmdに問題はありません。cmdでプログラムを実行中にチェックsys.stdin.encoding
したところ、すべてうまくいきました。頭が爆発しただけだと思います。