Hallo, ein paar Gedanken zur Beziehung zwischen Bytes und Zeichen ... Klaus Meyer wrote:
Was sind Encodings? Das Encoding ist eine Vorschrift, wie ich die Zahlen als Bytes repräsentiere.
Hier muss es doch sicher Zeichen heißen, und nicht Zahlen?
In diesem Kontext sind mit "Zahlen" wohl die Zahlencodes von Unicode gemeint. Unicode ordnet jedem in Unicode (genauer: der jeweiligen Unicode- Version) bekannten Zeichen eine bestimmte Zahl zu. Meiner Meinung nach ist es am sichersten, Python-Strings einfach nur als Daten (Byte-Folgen) anzusehen. Leider versteht man unter einem String traditionell eher eine Folge speziell von Zeichen, nicht einfach von Bytes. Strings im Sinne von Bytefolgen hat man z. B. hier: bild_datei = open('mypic.jpg', 'rb') bild = bild_datei.read() bild_datei.close() bild enthält nun eine Bytefolge, die das Bild repräsentiert; der größte Teil davon ist aber nicht sinnvoll als lesbares Zeichen zu interpretieren. Kaum anders ist es hierbei: text_datei = open('python_tipps.txt') text = text_datei.read() text_datei.close() Bis auf die Umwandlung von Zeilenende-Codes des Betriebssystems in das Byte 0x0a wird hier auch einfach nur eine Bytefolge gelesen. Der Variablen- name text gibt zwar einen Hinweis auf die Verwendung dieser Daten, aber es handelt sich, aus Sicht von Python, dennoch nicht um Zeichen. (Ok, das ist eine stolze Behauptung, aber ich lasse es mal so stehen ;-) ). Um zu wissen, welche Zeichen in der Datei stehen (genauer gesagt: welche Zeichen diese Bytefolge repräsentiert), muss man das Encoding der Bytefolge kennen. Das Encoding gibt an, wie die Bytefolge in eine Zeichenfolge umzuwandeln ist bzw. umgekehrt. Diese Umwandlung ist möglich mit der Funktion unicode: unicode_text = unicode(text, encoding) # encoding ist bspw. 'latin1' In unicode_text steht nun eine Folge von Zeichen. Dafür ist die Bytefolge, die interne Repräsentation der Zeichen, nicht mehr bekannt (bzw. von der Python-Implementierung abhängig). Zusammenfassung: "Normale" Python-Strings sind zunächst einmal nur Bytefolgen. Ob ein String Zeichen repräsentiert bzw. welche, hängt von der Interpretation des Strings aus Sicht der Anwendung ab. Andererseits sind Unicode-Strings Zeichenfolgen und nicht von einer bestimmten Interpre- tation abhängig. Stefan _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de