Odpowiedzi:
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 .
Domyślam się, że wskazuje „Unicode”, czy to prawda?
Tak.
Jeśli tak, to od kiedy jest dostępny?
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.
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
futro
kontra niewłaściwie zdekodowane
f
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).
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:
a = ['co32','co36']
b = [u'co32',u'co36']
Jeśli sprawdzisz set(a)==set(b)
, pojawi się on jako False, ale jeśli wykonasz następujące czynności:
b = str(b)
set(a)==set(b)
Teraz wynik będzie prawdziwy.
str()
lub u'€'.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ąg repr()
listy, tj b = "[u'co32', u'co36']"
. Następnieset(a)==set(b) = False