2016-07-24 20 views
1

Spyder IDEとPythonシェルで実行されている間に、すぐに動作するスクリプトがあります。問題を理解するために、私は、CMDプロンプトを通してそれを実行し、次のように発生しました:UnicodeEncodeError:スクリプトはSpyderとIDLEで実行されますが、cmdプロンプトでは実行されません。

Traceback (most recent call last): 
File "C:\Users\Cheese\Desktop\demografik-proje\demo-form-v-0-1-3.py", line 314, in <module> 
mainMenu(q_list, xtr_q_list) 
File "C:\Users\Cheese\Desktop\demografik-proje\demo-form-v-0-1-3.py", line 152, in mainMenu 
patient_admin = input("Testi uygulayan ki\u015fi: ") #the person who administrated the test 
File "C:\Program Files\Python35\lib\encodings\cp850.py", line 12, in encode 
return codecs.charmap_encode(input,errors,encoding_map) 
UnicodeEncodeError: 'charmap' codec can't encode character '\u015f' in position 18: character maps to <undefined> 

この質問は前に何度も頼まれましたが、私が求めている理由は、このスクリプトはただ、一部のコンピュータでは正常に動作しますダブルクリックしても、私の場合は動作しません。私が集めたことから、私のコンピュータが英語であるにもかかわらず、実行可能なコンピュータはトルコ語であったという事実に関連するのだろうか?

また、プログラムには多くのトルコ語の文字列が含まれているため、個々の文字列を覚えておらず、むしろ上に何かを置いています。私はUTF8でスクリプトを実行するためのバッチファイルをセットアップすることさえしています。または、UTF8を認識するような方法でフリーズすることができたら(これが優先されます)?また、私はちょうどチェックし、すべてのトルコ語の文字が削除されている場合、プログラムは正常に動作します。予想通り。

SpyderはまだPython 3.5.1を実行していますが、3.5.2がインストールされています。コマンドプロンプトで「python」と入力すると、Python 3.5.2は正常に動作します。それはどのような援助だ場合は、次の

は、コードです:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

""" 
Block o' Code 
""" 
    patient_admin = input("Testi uygulayan kişi: ") #the person who administrated the test 

    #gets input for all the data program needs  
    print("=======================================") 
""" 
More block o' code 
""" 
+0

問題は、 'cmd.exe'が使用しているコードセットです。 – cdarke

+0

あなたのコードは(おそらく)上手です(私はすべてのことを読んでいません、あなたは[mcve]であなたの問題を説明する必要があります)。しかし、コードが実行される端末を修正して、UTF-8コードページを使用するようにする必要があります。私はWindowsユーザーではありませんが、レジストリを編集する方法を示す様々なSOの回答があります。対話的なコマンドプロンプトでは、Pythonスクリプトを実行する前に 'chcp 65001'を実行するだけです。明らかに、スクリプトをダブルクリックして起動するときはオプションではありません。 –

+0

[デフォルトでcmd.exeでUnicode文字セットを作成する方法]の回答(http://stackoverflow.com/questions/14109024/how-to-make-unicode-charset-in-cmd-exe-by-default )にはいくつかの解決策があるようです。 –

答えて

0

さて、解決策を見つけ、私は(私は2〜3時間、この1を把握しようとした検討)、このいずれかを逃したか疑問。

ASCII以外の文字列でプログラムを実行するには、コマンドプロンプトのコードページを変更します。 、Unicode対応でないプログラムの管理]タブ [言語に Windowsのコントロールパネルを開き 地域を選択し、言語の クリックして変更システムロケール をクリックします(私の場合のためにトルコ語)ロケールを選択してください [OK]をクリックして

:それを行うには

それはあなたのコンピュータを再起動するでしょう、その後、あなたのプログラムは正常に動作するはずです。

出典:文字列引数でhttp://knowledgebase.progress.com/articles/Article/4677

+0

Genius friend:他のスクリプトを実行しますかマシン? – dsgdfg

+0

私はむしろ広範なソリューションを提供したいと思っていますが、このプログラムは私たちのクリニックでは限られた数のコンピュータで使用されるため、うまくいくはずです。公に配布される予定ですが、プログラムを使いたい人は言語設定を切り替えることができます。 –

+0

すべての端末のアプリをウェブ側に移動します。エンコードの問題、許可なし、追加ファイルなしなど – dsgdfg

0

inputprint、および、悪名高い、PrintFailsを行います。

WindowsのコマンドプロンプトがUnicodeで絶望的に壊れています。 Pythonスクリプトを実行する前に、使用するコードページを印刷する文字を含むコードページに変更することができます(たとえば、コマンドを従来のトルコ語エンコードcode page 1254に使用する)。 「Unicode以外のプログラムの言語」を設定すると、このコードページがすべてのコマンドプロンプトの既定値として設定されます。

1254に存在しない文字を使用する必要がある場合、これは失敗します。@ PM2Ringは、コードページ65001(これはほぼUTF-8です)を使用することができますが、実際には、 Windowsのこのコードページの実装に存在するバグは、通常は使用できなくなります。

また、Windowsコマンドプロンプトの問題を回避するために、win-unicode-consoleモジュールをインストールすることもできます。

+0

ええと、私は参照してください。さて、chcpやコードページの変更があれば動作しますが、興味のあることは、エンドユーザがコンピュータ上で何かを変更することなくこれを行う方法があるかどうかです。ここで私のコンピュータの設定をクリニックで変更することはできますが、もし配布したいのであれば、ほとんどのコンピュータがおそらくOEM857のデフォルトを持っていても、迷惑をかけるかもしれません。 –

+0

Windowsコンソール(conhost)はちょうど壊れていて、MSは多くの主要な更新でそれを修正することに興味を示さなかった。あなたのアプリで 'win-unicode-console'を運ぶこともできます(あるいは、あなたのアプリがコマンドプロンプトから実行されていることを検出するとctypes経由でWin32固有の' WriteUnicodeW' APIを直接呼び出すことができます。やっている)。ただし、デフォルトのコンソールビットマップフォントは役に立たないという問題があります。 – bobince

関連する問題