2010-02-04 22 views
12

Estoy tratando de reemplazar caracteres de nueva línea en una cadena Unicode y parece que faltan algunos códigos mágicos.Reemplazar nuevas líneas en una cadena Unicode

Mi ejemplo particular es que estoy trabajando en AppEngine y tratando de poner títulos de páginas HTML en un db.StringProperty() en mi modelo.

Así que hago algo así como:

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

y me sale:

Property title is not multi-line 

¿Hay otros códigos que debería usar para la sustitución?

+0

Imprima 'repr()' de 'page_title' y vea qué caracteres especiales contiene. –

Respuesta

17

Probar ''.join(unicode(page_title, 'utf-8').splitlines()). splitlines() debe dejar que el estándar de la biblioteca se encargue de todos los posibles saltos de línea Unicode loco, y luego simplemente se unen a todos de vuelta junto con la cadena vacía para obtener una versión de una sola línea.

+1

¡Gracias! Eso funcionó como un campeón. –

-1

Sería útil imprimir el repr() del page_title que se ve como multilínea, pero el candidato obvio sería '\r'.

+0

Actualicé mi ejemplo para incluir el retorno de carro (el mismo resultado). –

8

Python utiliza estos caracteres para la división en unicode.splitlines():

  • U + 000A LÍNEA FEED (\ n)
  • U + 000D retorno de carro (\ r)
  • U + 001C archivo separador
  • U + 001D GRUPO SEPARADOR
  • U + 001E separador de registros de
  • U + 0085
  • siguiente línea
  • U + 2028 línea de separación
  • U + 2029 PARRAFO SEPARADOR

Como dice Hank, utilizando splitlines() le permitirá Python cuidar de todos los detalles para usted, pero si tiene que hacerlo de forma manual, entonces este debería ser la lista completa.

+0

Eso es útil. Pero parece que 'splitlines()' lo hizo por mí. –

+0

Sin preocupaciones; Pensé que 'splitlines()' era la respuesta correcta; Esto fue solo en caso de que realmente necesitaras la lista. –

Cuestiones relacionadas