2012-10-26 5 views
28

Mam ciąg znaków, który otrzymałem od odczytania adresu URL strony z punktorami, które mają symbol "•" z powodu listy wypunktowanej. Zauważ, że tekst jest źródłem html z adresu internetowego przy użyciu urllib2.read (adresu webowego) w Pythonie 2.7.Jak zamienić znaki Unicode w ciąg znaków na coś innego niż python?

Znam charakter Unicode dla tego jako U + 2022, ale jak faktycznie zastąpić ten znak Unicode coś takiego?

Próbowałem wykonać str.replace ("•", "something");

ale nie wydaje się działać ... jak to zrobić?

+0

Jaki jest typ łańcucha i jakiej wersji języka Python używasz? –

+0

Używam Pythona 2.7, ciąg znaków jest tworzony z urllib2.read() – Rolando

+0

Przykro mi, nie będę teraz pobierać strony internetowej za pomocą 'urllib2'. Czym jest "typ"? 'str' lub' unicode'? –

Odpowiedz

47
  1. zdekodować ciąg Unicode. Zakładając, że to UTF-8-zakodowane:

    str.decode("utf-8") 
    
  2. wywołać metodę replace i mieć pewność, aby przekazać go ciąg Unicode jako pierwszy argument:

    str.decode("utf-8").replace(u"\u2022", "*") 
    
  3. Kodowanie Powrót do UTF-8, jeśli potrzebna.

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

(szczęście, Python 3 kładzie kres tego bałaganu Krok 3 powinno być wykonane tylko tuż przed I/O. Pamiętaj również, że wywoływanie ciągu znaków str powoduje zaciemnienie wbudowanego typu str.)

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

To nie jest gwiazdka, to jest pocisk (kształt koła). – Rolando

+0

Dobrze - dzięki za heads up. – David

+2

-1 Stosowanie wyrażenia regularnego w celu zastąpienia ciągów stałych. – NullUserException

8

Zakoduj łańcuch jako kod Unicode.

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

co to jest "specjalny"? Otrzymuję nazwęError: nazwa "special" nie jest zdefiniowana. – Rolando

+0

@Rolando Uwaga "u" zostało poprzedzone ciągiem znaków, co powoduje, że jest to ciąg znaków Unicode. – igaurav

Powiązane problemy