W języku Python, mam tekst, który jest zakodowany w Unicode. Ten tekst zawiera spacje nierozdzielające, które chcę przekonwertować na "x". Nieprzerwane spacje są równe chr(160)
. Mam następujący kod, który działa świetnie, gdy uruchamiam go jako Django przez Eclipse przy użyciu Localhost. Nie są konwertowane żadne błędy ani spacje nierozdzielające.Python: zastępowanie spacji w Unicode
my_text = u"hello"
my_new_text = my_text.replace(chr(160), "x")
Jednakże gdy uruchomię go w żaden inny sposób (wiersz poleceń Python, Django poprzez uruchomieniowego zamiast Eclipse) pojawia się błąd:
'ascii' codec can't decode byte 0xa0 in position 0: ordinal not in range(128)
Chyba ten błąd ma sens, ponieważ próbuje porównać Unicode (my_text) do czegoś, co nie jest Unicode. Moje pytania to:
- Jeśli to
chr(160)
to nie Unicode, co to jest? - Dlaczego to działa, gdy uruchamiam go z Eclipse? Zrozumienie tego pomoże mi ustalić, czy muszę zmienić inne części mojego kodu. Testowałem mój kod z Eclipse.
- (najważniejsze) W jaki sposób mogę rozwiązać mój pierwotny problem usuwania nieprzestrzegających spacji?
my_text
zdecydowanie będzie w standardzie Unicode.
Perfect, dzięki. unichr() działa zarówno przez Eclipse, jak i przez Eclipse. Dziwne, że chr() i unichr() dają taki sam wynik podczas uruchamiania z Eclipse. – user984003
Twoja konfiguracja Eclipse może zmienić domyślne kodowanie na UTF8 zamiast ASCII. Nie jest to zalecane, z powodu oczywistych przyczyn kompatybilności. Kod napisany w tej konfiguracji może nie działać w innym miejscu. –
Właściwie ASCII (0x00 do 0x7F) jest kompatybilny z UTF-8, ponieważ pierwsze 128 punktów kodowych UTF-8 jest takie samo jak ASCII. Jednak 0xa0 zdecydowanie nie jest ASCII, stąd błąd podczas używania 'chr' zamiast' unichr' ... – dda