2010-02-04 17 views
12

Ich versuche Newline-Zeichen in einer Unicode-Zeichenfolge zu ersetzen und scheinen einige magische Codes zu fehlen.Ersetzen Sie Zeilenumbrüche in einer Unicode-Zeichenfolge

Mein spezielles Beispiel ist, dass ich an AppEngine arbeite und versuche, Titel aus HTML-Seiten in eine db.StringProperty() in meinem Modell zu setzen.

So mache ich so etwas wie:

link.title = unicode(page_title,"utf-8").replace('\n','').replace('\r','') 

und ich bekomme:

Property title is not multi-line 

Gibt es andere Codes sollte ich verwenden für die ersetzen sein?

+0

Drucken Sie die 'repr()' von 'page_title' und sehen Sie, welche Sonderzeichen darin enthalten sind. –

Antwort

17

Versuchen Sie ''.join(unicode(page_title, 'utf-8').splitlines()). splitlines() sollte die Standard-Bibliothek kümmern sich um alle möglichen verrückten Unicode Zeilenumbrüche, und dann verbinden Sie sie alle wieder zusammen mit der leeren Zeichenfolge, um eine einzeilige Version zu erhalten.

+1

Danke! Das hat wie ein Champion funktioniert. –

-1

Es wäre nützlich, die repr() des page_title zu drucken, die als mehrzeilig betrachtet wird, aber der offensichtliche Kandidat wäre '\r'.

+0

Ich habe mein Beispiel aktualisiert, um den Wagenrücklauf einzuschließen (dasselbe Ergebnis). –

8

Python verwendet diese Zeichen für das Aufspalten in unicode.splitlines():

  • U + 000A LINE FEED (\ n)
  • U + 000D CARRIAGE RETURN (\ r)
  • U + 001C FILE SEPARATOR
  • U + 001D GROUP SEPARATOR
  • U + 001E RECORD SEPARATOR
  • U + 0085 NÄCHSTEN ZEILE
  • U + 2028 LINE SEPARATOR
  • U + 2029 ABSATZ SEPARATOR

Als Hank sagt, splitlines() verwendet, wird Python Sorgfalt für Sie alle Details nehmen lassen, aber wenn Sie benötigen es manuell zu tun, dann diese sollte die vollständige Liste sein.

+0

Das ist hilfreich. Aber sieht aus wie 'splitlines()' hat es für mich getan. –

+0

Keine Sorgen; Ich dachte, 'splitlines()' war die richtige Antwort; Dies war nur für den Fall, dass Sie die Liste wirklich brauchten. –

Verwandte Themen