
Hi Diez, ich antworte mal an die Liste, so hat jeder was davon ;-) Am Samstag, 20. August 2005 12:30 schrieb Diez B. Roggisch:
So, wie die Sache steht, bleibt mir wohl nix anderes übrig, als auf zeilenweise Verarbeitung auszuweichen, oder hat jemand eine bessere Idee?
Ärgerliches Problem, ähnliches hatte ich auch schon mit DB-Spalten. Damals mit JAVA, dessen utf-encoder sowas dankenderweise überliest - die Daten waren dann zwar abgeschnitten, aber bei limitierten Spaltenbreiten passiert das eh.
Yup, und ich wette, diese Art von Problemen treten im asiatischen Sprachraum deutlich häufiger auf als bei uns..
Kannst du nicht die Blöcke verketten? Dann könntest du im Fall eines Fehlers erstmal den nächsten anhängen. Es sollte doch schon _sehr_ mit dem teufel zugehen, wenn du da nicht früher oder später einen grösseren Block bekommst, der sich umkodieren lässt.
Etwa so:
blocks = [] while True: data = self.a2psfile.read(BUFSIZE) if not data: break blocks.append(data) try: out = "".join(blocks).decode('utf8').encode('cp850') pfp.write(data) blocks = [] except UnicodeDecodeError: pass
Ahh, interessante Idee, aber ich versuche, den Speicherverbrauch möglichst deterministisch zu halten, sonst hätte ich mir den hassle mit dem Tempfile ganz sparen können, wenn im dümmsten Falle doch wieder alle Daten im Speicher landen. Alternativ könnte man die Blockgröße reduzieren, was dann zwar diese Wahrscheinlichkeit verringert, aber auch den Sinn und Zweck des blockweisen Verarbeitens in Frage stellt, also bleibt nach reiflicher Überlegung als beste Alternative doch nur die zeilenweise Verarbeitung (mit den Vorteilen der knappsten Notation und der Selbstdokumentiertheit ;-)). Aber immerhin war dieser Fehler nützlich, einen Problemaspekt im Umgang mit Multibyte-Encodings aufzuzeigen, der mir bis dahin noch nicht so bewußt war (manchmal schlagen da wohl noch meine Assembler und C Wurzeln durch). Danke Dir vielmals, Pete _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de