Mam przeglądarkę, która wysyła znaki utf-8 do mojego serwera Python, ale kiedy pobieram go z ciągu zapytania, kodowanie, które zwraca Python, to ASCII. Jak przekonwertować zwykły ciąg znaków na utf-8?
UWAGA: Ciąg przekazywany z sieci jest już zakodowany w UTF-8, chcę tylko, aby Python traktował go jako UTF-8, a nie ASCII.
python
python-2.7
unicode
utf-8
Bin Chen
źródło
źródło
"some_string".encode('utf-8').decode('utf-8')
Odpowiedzi:
^ Jest to różnica między ciągiem bajtów (zwykły_ciąg) a ciągiem Unicode.
^ Konwersja do Unicode i określenie kodowania.
źródło
UnicodeDecodeError: 'utf8' codec can't decode byte 0xb0 in position 2: invalid start byte
To jest mój kod: ret = [] dla wiersza w csvReader: cline = [] dla wiązu w wierszu: unicodestr = unicode (wiąz, 'utf-8') cline.append (unicodestr) ret .append (cline)unicode()
nie istnieją.u
powrotem nastr
format (przekonwertować zu
powrotem nas
)?Jeśli powyższe metody nie działają, możesz również powiedzieć Pythonowi, aby zignorował fragmenty ciągu, których nie może przekonwertować na utf-8:
źródło
Może to być trochę przesada, ale kiedy pracuję z ascii i Unicode w tych samych plikach, powtarzanie dekodowania może być uciążliwe, oto czego używam:
źródło
Dodanie następującego wiersza na górze pliku .py:
pozwala kodować ciągi bezpośrednio w skrypcie, w następujący sposób:
źródło
from __future__ import unicode_literals
na górze lub użyju''
prefiksu. Nie używaj literatów innych niż asciibytes
. Aby uzyskać bajty utf-8, możeszutf8bytes = unicode_text.encode('utf-8')
później, jeśli to konieczne.from __future__ import unicode_literals
pomoże mi przekonwertować ciąg znaków innych niż ascii na utf-8?Jeśli dobrze cię rozumiem, masz w kodzie kod bajtowy utf-8.
Konwersja ciągu bajtowego na ciąg Unicode jest znana jako dekodowanie (Unicode -> ciąg bajtów jest kodowany).
Robisz to za pomocą funkcji Unicode lub metody dekodowania . Zarówno:
Lub:
źródło
źródło
W Pythonie 3.6 nie mają wbudowanej metody unicode (). Ciągi są już domyślnie przechowywane jako Unicode i konwersja nie jest wymagana. Przykład:
źródło
Przetłumacz za pomocą ord () i unichar (). Każdy znak Unicode ma przypisany numer, coś w rodzaju indeksu. Python ma więc kilka metod na translację między char i jego liczbą. Minusem jest przykład. Mam nadzieję, że to może pomóc.
źródło
Tak, możesz dodać
w pierwszym wierszu kodu źródłowego.
Możesz przeczytać więcej szczegółów tutaj https://www.python.org/dev/peps/pep-0263/
źródło