2016-07-24 5 views
1

Ich habe ein funktionierendes Skript zur Hand, während es auf der Spyder IDE und Python Shell läuft, wenn ich es einfach durch Doppelklick starte, es schließt sofort. Um das Problem zu verstehen, ich lief es über die Befehlszeile aus und begegnet den folgenden:UnicodeEncodeError: Script läuft auf Spyder und IDLE, aber nicht auf cmd prompt

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> 

Diese Frage schon oft gefragt worden, aber warum ich frage ist, dieses Skript funktioniert in einigen Computern in Ordnung, nur per Doppelklick, funktioniert aber bei mir zum Beispiel nicht. Was könnte ich daraus entnehmen, dass mein Computer auf Englisch ist und die Computer, die laufen konnten, auf Türkisch waren?

Auch da Programm viele türkische Saiten hat, würde ich lieber nicht mit jeder einzelnen Saite herumspielen und lieber etwas auf die Spitze stellen oder sowas. Ich bin sogar bereit, eine Batch-Datei einzurichten, um das Skript in UTF8 auszuführen. Oder wenn ich es so einfrieren könnte, dass es UTF8 erkennt (das wäre zu bevorzugen)? Auch habe ich gerade überprüft, und das Programm funktioniert gut, wenn alle türkischen Zeichen entfernt werden. Wie erwartet.

Wenn es irgendeine Hilfe ist, läuft Spyder immer noch Python 3.5.1, ich habe 3.5.2 installiert und wenn ich einfach "Python" an der Eingabeaufforderung eingeben, läuft Python 3.5.2 ganz gut.

Nach der Code, wenn es jede Hilfe ist:

#!/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

Das Problem ist der Zeichensatz, den 'cmd.exe' verwendet. – cdarke

+0

Ihr Code ist (wahrscheinlich) in Ordnung (ich werde das ganze Zeug nicht durchlesen, Sie sollten Ihr Problem mit einem [mcve] veranschaulichen).Sie müssen jedoch das Terminal reparieren, auf dem der Code ausgeführt wird, sodass eine UTF-8-Codepage verwendet wird. Ich bin kein Windows-Benutzer, aber es gibt verschiedene SO-Antworten, die zeigen, wie man das durch Bearbeiten der Registrierung macht. In einer interaktiven Eingabeaufforderung können Sie 'chcp 65001' ausführen, bevor Sie Ihre Python-Skripte ausführen. Das ist natürlich keine Option beim Starten eines Skripts per Doppelklick. –

+0

Die Antworten auf [Wie Unicode-Zeichensatz in cmd.exe standardmäßig erstellt wird?] (Http://stackoverflow.com/questions/14109024/how-to-make-unicode-charset-in-cmd-exe-by-default) scheinen ein paar Lösungen zu haben. –

Antwort

0

Okay, fand die Lösung, sich fragen, wie ich diese verpasst (bedenkt, dass ich für 2-3 Stunden, um diese ein, um herauszufinden versucht).

Um das Programm mit Nicht-ASCII-Zeichenfolgen auszuführen, können Sie die Codepage für die Eingabeaufforderung ändern. Um das zu tun: Klicken Sie Öffnen Sie den Windows-Systemsteuerung Region und Sprache auswählen Klicken Sie auf die Registerkarte Administrativ unter Sprache für Nicht-Unicode-Programmen auf Change System Locale Wählen Sie das Gebietsschema (Türkisch für meinen Fall) Klicken Sie auf OK

Es wird Ihren Computer neu starten, danach sollte Ihr Programm gut funktionieren.

Quelle: http://knowledgebase.progress.com/articles/Article/4677

+0

Genius-Freund: Wollte Skript auf anderen ausführen Maschinen? – dsgdfg

+0

Nun, ich hätte lieber eine weit verbreitete Lösung, aber da dieses Programm in unserer Klinik in einer begrenzten Anzahl von Computern verwendet wird, sollte es uns gut gehen. Es wird auch öffentlich verteilt, aber die Leute können die Spracheinstellung ändern, wenn sie das Programm benutzen wollen. –

+0

Verschieben Sie Ihre App für alle Geräte auf die Webseite. Keine Kodierung, keine Erlaubnis, keine zusätzlichen Dateien usw. – dsgdfg

0

input mit einem String-Argument hat eine print, und, notorisch, PrintFails.

Die Windows-Eingabeaufforderung ist hoffnungslos bei Unicode unterbrochen. Sie können die verwendete Codepage in eine andere mit den Zeichen ändern, die Sie drucken möchten, z. B. mit dem Befehl chcp 1254 für die ältere türkische Codierung code page 1254, bevor Sie das Python-Skript ausführen. Wenn Sie die Sprache für Nicht-Unicode-Programme festlegen, legen Sie diese Codepage als Standard für alle Eingabeaufforderungen fest.

Dies wird jedoch immer noch fehlschlagen, wenn Sie Zeichen verwenden müssen, die in 1254 nicht vorhanden sind. In der Theorie wie @ PM2Ring schlägt vor, Sie Codepage 65001 (die fast UTF-8 ist) verwenden, aber in der Praxis die lange Stehende Fehler in der Windows-Implementierung dieser Codepage machen es normalerweise unbrauchbar.

Sie können auch versuchen, das win-unicode-console-Modul zu installieren, das versucht, die Probleme der Windows-Eingabeaufforderung zu umgehen.

+0

Hmm, ich verstehe. Nun, chcp oder Code ändern Seite funktioniert anders, aber was ich bin neugierig ist, wenn es eine Möglichkeit, dies zu tun, ohne sich auf den Endbenutzer, um etwas auf seinem Computer zu ändern. Ich kann die Einstellungen auf unseren Computern hier in der Klinik ändern, aber wenn ich es verteilen möchte, kann es für einige Leute lästig sein (obwohl die meisten Computer wahrscheinlich ihren Standard wie OEM857 haben) –

+0

Die Windows-Konsole (Conhost) ist gerade gebrochen und MS haben kein Interesse gezeigt, es über viele Hauptaktualisierungen zu beheben. Sie könnten vielleicht 'win-unicode-console' mit Ihrer App ausliefern (oder direkt die Win32-spezifische API' WriteUnicodeW' über ctypes aufrufen, wenn Sie feststellen, dass Ihre App über eine Eingabeaufforderung läuft, was im Wesentlichen die Win-Unicode-Konsole ist tun). Obwohl Sie immer noch das Problem der Standardkonsolen-Bitmap-Schriftart nutzlos sind. – bobince

Verwandte Themen