Python utf-Codierung problem mit der command line
Für die letzten paar Tage ich haben wurde, lernen die Programmierung mit Python und ich bin aber noch ein Anfänger. Vor kurzem, ich habe das Buch "Code in the cloud' für diesen Zweck. Die Sache ist die, während alle diejenigen, die Lehrbücher decken einen weiten Bereich von Themen gründlich Sie berühren lediglich auf die Ausgabe von UTF-8-Codierung in anderen Sprachen als Englisch. Hance meine Frage an Sie - wie die folgenden batch-code-Anzeige utf-8-Zeichen korrekt in meiner Muttersprache.
# -*- coding: utf-8 -*-
import datetime
import sys
class ChatError(Exception):
""" Wyjątki obsługujące wszelkiego rodzaju błędy w czacie."""
def __init__(self, msg):
self.message = msg
# START: ChatMessage
class ChatMessage(object):
"""Pojedyncza wiadomość wysłana przez użytkownika czatu"""
def __init__(self, user, text):
self.sender = user
self.msg = text
self.time = datetime.datetime.now()
def __str__(self):
return "Od: %s o godzinie %s: %s" % (self.sender.username,
self.time,
self.msg)
# END: ChatMessage
# START: ChatUser
class ChatUser(object):
"""Użytkownik biorący udział w czacie"""
def __init__(self, username):
self.username = username
self.rooms = {}
def subscribe(self, roomname):
if roomname in ChatRoom.rooms:
room = ChatRoom.rooms[roomname]
self.rooms[roomname] = room
room.addSubscriber(self)
else:
raise ChatError("Nie znaleziono pokoju %s" % roomname)
def sendMessage(self, roomname, text):
if roomname in self.rooms:
room = self.rooms[roomname]
cm = ChatMessage(self, text)
room.addMessage(cm)
else:
raise ChatError("Użytkownik %s nie jest zarejestrowany w pokoju %s" %
(self.username, roomname))
def displayChat(self, roomname, out):
if roomname in self.rooms:
room = self.rooms[roomname]
room.printMessages(out)
else:
raise ChatError("Użytkownik %s nie jest zarejestrowany w pokoju %s" %
(self.username, roomname))
# END: ChatUser
# START: ChatRoom
class ChatRoom(object):
"""A chatroom"""
rooms = {}
def __init__(self, name):
self.name = name
self.users = []
self.messages = []
ChatRoom.rooms[name] = self
def addSubscriber(self, subscriber):
self.users.append(subscriber)
subscriber.sendMessage(self.name, 'Użytkownik %s dołączył do dyskusji.' %
subscriber.username)
def removeSubscriber(self, subscriber):
if subscriber in self.users:
subscriber.sendMessage(self.name,
"Użytkownik %s opóścił pokój." %
subscriber.username)
self.users.remove(subscriber)
def addMessage(self, msg):
self.messages.append(msg)
def printMessages(self, out):
print >>out, "Lista wiadomości: %s" % self.name
for i in self.messages:
print >>out, i
# END: ChatRoom
# START: ChatMain
def main():
room = ChatRoom("Main")
markcc = ChatUser("MarkCC")
markcc.subscribe("Main")
prag = ChatUser("Prag")
prag.subscribe("Main")
markcc.sendMessage("Main", "Hej! Jest tu kto?")
prag.sendMessage("Main", "Tak, ja tu jestem.")
markcc.displayChat("Main", sys.stdout)
if __name__ == "__main__":
main()
# END: ChatMain
Es wurde aus dem oben genannten Buch, aber ich kann nicht machen, es zeigt nicht-englische Zeichen enthalten, korrekt in der Windows-Kommandozeile (obwohl es das unterstützt). Wie Sie sehen können habe ich Hinzugefügt encoding-Anweisung (# -- coding: utf-8 -) am Anfang durch die der code überhaupt funktioniert. Ich habe auch versucht, mit u"string" - syntax, jedoch ohne Erfolg - es gibt die folgende Meldung:
UnicodeEncodeError: 'ascii' codec can't encode character u'\u017c' in position 5
1: ordinal not in range(128)
Was ist zu tun, damit diese Zeichen korrekt angezeigt? Ja, ich arbeite oft mit strings formatiert in UTF. Ich wäre für Eure Hilfe sehr dankbar.
- Die Codierung Aussage ist für Charaktere, die die Benutzer in die Datei, nicht dass es druckt. Sie müssen etwas tun, line
print username.decode('utf-8')
zu erzählen Python zum decodieren der Zeichenfolge in unicode wird es dann codieren Sie es automatisch richtig
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Aufruf der Python-interpreter auf diese Weise:
Dies setzt den globalen default-Kodierung utf-8. Die üblichen default encoding ist ASCII. Dies wird verwendet beim schreiben von Strings in eine Produktion, wie die Verwendung von built-ins wie print.
setdefaultencoding
aussys
nach dem ausführensite
so zu nennenreload(sys)
sofort nachimport sys
wenn Sie es verwenden möchten, die außerhalbsite
.-S
option (don ' T import site-Modul). Dann rufen Sie setdefaultencoding, dann explizit importieren-Website danach. Der Grund dafür ist die site-module entfernt die setdefaultencoding Methode, nachdem Sie einmal verwendet (also es kann nicht später geändert werden).Dies funktioniert für mich derzeit:
Okay, ich weiß nichts über python, und wenig über die windows command-line, aber ein wenig Googeln und:
Ich denke, das problem ist, dass die windows-cmd-shell doesn ' T support utf-8. Wenn ich mich nicht falsch, dies sollte Ihnen mehr Verständnis über den Fehler:
http://wiki.python.org/moin/PrintFails
(Habe das link von dieser Frage:"Unicode-Zeichen in der Windows-Kommandozeile - wie?).
Sieht es aus wie Sie können erzwingen, dass python zu denken, es kann drucken, UTF8 mit PYTHONIOENCODING.
Diese Frage ist über die Suche nach utf8-fähigen windows-shells:
Gibt es eine Windows-Befehlsshell, die angezeigt werden Unicode-Zeichen?
Kann hilfreich sein. Hoffe, Ihr problem zu lösen.
putty
Griffe UTF-8 ganz gut. Es ist nicht Python ' s job-Anzeige rechts. Das ist der job von deinem terminal-Programm.Windows terminal-manchmal mit einer nicht-UTF-8-Codierung (python: unicode in Windows-terminal-encoding verwendet?). Sie vielleicht wollen, versuchen Sie Folgendes:
Dieser nimmt den byte-strings, verwandelt Sie in Zeichenketten (Ihre Datei zeigt an, dass Sie in UTF-8 codiert), und dann kodiert Sie für Ihr terminal.
Finden Sie nützliche Informationen über die Allgemeine Frage der Kodierung und Dekodierung StackOverflow.