2010-02-04 7 views
12

J'essaie de remplacer les caractères de nouvelle ligne dans une chaîne Unicode et semble manquer des codes magiques.Remplacer les nouvelles lignes dans une chaîne Unicode

Mon exemple particulier est que je travaille sur AppEngine et essaie de mettre des titres de pages HTML dans un db.StringProperty() dans mon modèle.

Alors je fais quelque chose comme:

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

et je reçois:

Property title is not multi-line 

Y at-il d'autres codes que je devrais utiliser pour le remplacer?

+0

Imprime le 'repr()' de 'page_title' et identifie les caractères spéciaux qu'il contient. –

Répondre

17

Essayez ''.join(unicode(page_title, 'utf-8').splitlines()). splitlines() devrait laisser la bibliothèque standard prendre soin de tous les sauts de ligne Unicode fous, puis vous suffit de les rejoindre tous ensemble avec la chaîne vide pour obtenir une version d'une seule ligne.

+1

Merci! Cela a fonctionné comme un champion. –

-1

Il serait utile d'imprimer le repr() du page_title qui est considéré comme multiligne, mais le candidat évident serait '\r'.

+0

J'ai mis à jour mon exemple pour inclure le retour chariot (même résultat). –

8

Python utilise ces caractères pour le fractionnement en unicode.splitlines():

  • U + 000A saut de ligne (\ n)
  • U + 000D retour chariot (\ r)
  • U + 001C FILE SEPARATOR
  • U + 001D GROUPE SÉPARATEUR
  • U + 001F RECORD SÉPARATEUR
  • U + 0085 EN LIGNE PROCHAINE
  • U + 2028 LINE SEPARATOR
  • U + 2029 PARAGRAPHE SÉPARATEUR

Comme le dit Hank, en utilisant splitlines() laissera Python prendre soin de tous les détails pour vous, mais si vous avez besoin de le faire manuellement, ce devrait être la liste complète.

+0

C'est utile. Mais ressemble à 'splitlines()' l'a fait pour moi. –

+0

Pas de soucis; Je pensais que «splitlines()» était la bonne réponse; C'était juste au cas où vous auriez vraiment besoin de la liste. –

Questions connexes