Jak w:
u'Hello'
Domyślam się, że wskazuje „Unicode”, czy to prawda?
Jeśli tak, to od kiedy jest dostępny?
Masz rację, patrz 3.1.3. Ciągi znaków Unicode .
Jest to składnia od Python 2.0.
Python 3 sprawił, że stały się one zbędne, ponieważ domyślnym typem ciągu jest Unicode. Wersje od 3.0 do 3.2 usunęły je, ale zostały one ponownie dodane w wersji 3.3+ w celu zapewnienia zgodności z Python 2, aby wspomóc przejście z wersji 2 na 3.
ur"string"
) Jest poprawne w Pythonie 2, ale niestety jest to nieprawidłowa składnia w Pythonie 3.U
u'Some String'
oznacza, że Twój ciąg jest ciągiem Unicode .P: Bardzo mi się spieszy i wylądowałem tutaj z wyszukiwarki Google. Próbuję zapisać te dane do pliku, pojawia się błąd i potrzebuję najprostszego, prawdopodobnie wadliwego, rozwiązania w tym momencie.
Odp .: Naprawdę powinieneś przeczytać absolutnie minimum Joela Każdy programista absolutnie, pozytywnie musi wiedzieć o Unicode i zestawach znaków (bez wymówek!) Na temat zestawów znaków.
P: Sry no time code pls
Mandat. spróbuj
str('Some String')
lub'Some String'.encode('ascii', 'ignore')
. Ale naprawdę powinieneś przeczytać niektóre odpowiedzi i dyskusje na temat Konwertowania łańcucha Unicode i tego doskonałego, doskonałego elementu do kodowania znaków .źródło
Tak.
Python 2.x.
W Pythonie 3.x ciągi domyślnie używają Unicode i nie ma potrzeby używania
u
prefiksu. Uwaga: w Python 3.0-3.2 u jest błędem składni. W Pythonie 3.3+ znów legalne jest ułatwianie pisania aplikacji zgodnych z 2/3.źródło
u
przedrostka w Pythonie 3 jest nawet błędem składni .six.text_type()
wszędzie dla (miejmy nadzieję, niewielkiej liczby) osób nadal używających 3. [012] - przynajmniej informacje są dostępne, więc możesz wybrać.Przybyłem tutaj, ponieważ miałem na sobie syndrom Funny Char
requests
. myślałemresponse.text
że da mi poprawnie zdekodowany ciąg, ale w wyjściu znalazłem zabawne podwójne znaki, gdzie powinny być niemieckie umlauty.Okazało się, że
response.encoding
był jakoś pustyresponse
nie wiedziałem, jak poprawnie odkodować zawartość, i po prostu potraktowałem ją jako ASCII (tak myślę).Moim rozwiązaniem było uzyskanie surowych bajtów za pomocą „response.content” i ręczne zastosowanie
decode('utf_8')
do nich. Rezultatem był schöne Umlaute.Prawidłowo zdekodowany
kontra niewłaściwie zdekodowane
źródło
Wszystkie ciągi przeznaczone dla ludzi powinny używać „”.
Odkryłem, że następujący sposób myślenia bardzo pomaga w radzeniu sobie z ciągami znaków w języku Python: Wszystkie ciągi znaków w języku Python powinny korzystać ze
u""
składni. The""
Składni dla tablic bajtowych tylko.Zanim zacznie się walenie, pozwól mi wyjaśnić. Większość programów w języku Python zaczyna się od używania
""
ciągów. Ale potem muszą obsługiwać dokumentację przez Internet, więc zaczynają używać"".decode
i nagle wszędzie pojawiają się wyjątki dotyczące dekodowania tego i tamtego - wszystko z powodu użycia""
ciągów. W takim przypadku Unicode działa jak wirus i powoduje spustoszenie.Ale jeśli zastosujesz się do mojej zasady, nie będziesz mieć tej infekcji (ponieważ będziesz już zainfekowany).
źródło
bash -c "echo Shouldn\\'t you use b\\\"...\\\" for byte arrays?"
u""
.To jest Unicode.
Po prostu wstaw zmienną pomiędzy
str()
, a będzie działać dobrze.Ale w przypadku, gdy masz dwie takie listy:
Jeśli sprawdzisz
set(a)==set(b)
, pojawi się on jako False, ale jeśli wykonasz następujące czynności:Teraz wynik będzie prawdziwy.
źródło
str()
lubu'€'.encode()
) bez przekazania kodowania. Jeśli ciąg zawiera znaki inne niż ASCII, użytkownik otrzyma wyjątek UnicodeEncodeException.b = str(b)
po prostu podaje ciągrepr()
listy, tjb = "[u'co32', u'co36']"
. Następnieset(a)==set(b) = False