2012-10-26 15 views
28

Ich habe eine Zeichenfolge, die ich aus dem Lesen einer URL einer Seite mit Aufzählungszeichen erhalten, die ein Symbol wie "•" wegen der Aufzählungsliste haben. Beachten Sie, dass es sich bei dem Text um eine HTML-Quelle aus einer Webadresse handelt, die PURl2.read (Webadresse) von Python 2.7 verwendet.Wie Unicode-Zeichen in Zeichenfolge durch etwas anderes Python ersetzen?

Ich kenne das Unicode-Zeichen dafür als U + 2022, aber wie kann ich das Unicode-Zeichen tatsächlich ersetzen?

Ich habe versucht, str.replace ("•", "etwas");

aber es scheint nicht zu funktionieren ... wie mache ich das?

+0

Was ist der Typ der Zeichenfolge, und welche Version von Python verwenden Sie? –

+0

Ich benutze Python 2.7, String wird gebildet von urllib2.read() – Rolando

+0

Es tut mir leid, ich werde jetzt nicht herunterladen eine Webseite mit 'urllib2'. Was ist der Typ? 'str' oder' unicode'? –

Antwort

47
  1. Decode die Zeichenfolge in Unicode. Unter der Annahme, es ist UTF-8-encoded:

    str.decode("utf-8") 
    
  2. aufrufen replace Verfahren und sicherzustellen, dass es eine Unicode-Zeichenfolge als erstes Argument übergeben:

    str.decode("utf-8").replace(u"\u2022", "*") 
    
  3. Encode zurück zu UTF-8, wenn erforderlich.

    str.decode("utf-8").replace(u"\u2022", "*").encode("utf-8") 
    

(Glücklicherweise Python 3 setzt dem ein Ende zu diesem Schlamassel Schritt 3 sollte eigentlich nur kurz vor I/O durchgeführt werden. Beachten Sie außerdem, dass das Aufrufen einer Zeichenfolge str den integrierten Typ str schattiert.)

1
import re 
regex = re.compile("u'2022'",re.UNICODE) 
newstring = re.sub(regex, something, yourstring, <optional flags>) 
+1

Es ist kein Stern, es ist eine Kugel (Kreisform) – Rolando

+0

Richtig - danke für die Köpfe hoch. – David

+2

-1 Für die Verwendung von Regex zum Ersetzen fester Strings. – NullUserException

8

Codierung der Zeichenfolge als Unicode.

>>> special = u"\u2022" 
>>> abc = u'ABC•def' 
>>> abc.replace(special,'X') 
u'ABCXdef' 
+0

Was ist "speziell"? Ich bekomme einen nameError: Name 'special' ist nicht definiert. – Rolando

+0

@Rolando Beachten Sie, dass 'u' in der Zeichenkette vorangestellt ist, wodurch es zu einer Unicode-Zeichenkette wird. – igaurav

Verwandte Themen