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
InformationsquelleAutor Mathias | 2011-08-21
Schreibe einen Kommentar