Jak przekonwertować ciąg Unicode (zawierający dodatkowe znaki, takie jak £ $ itp.) Na ciąg Python?
python
string
unicode
type-conversion
williamtroup
źródło
źródło
print type(unicode_string), repr(unicode_string)
Python 3.x:print type(unicode_string), ascii(unicode_string)
Następnie edytuj pytanie i skopiuj / wklej wyniki powyższej instrukcji print. NIE wpisuj ponownie wyników. Spójrz również u góry HTML i sprawdź, czy możesz znaleźć coś takiego: <meta http-equiv = "Content-Type" content = "text / html; charset = iso-8859unicode_string = u"I'm unicode string"; bytestring = unicode_string.encode('utf-8'); unicode_again = bytestring.decode('utf-8')
Odpowiedzi:
Widzieć
unicodedata.normalize
źródło
unicode
ciągu na astr
jest upuszczenie lub konwersja znaków, które nie mogą być reprezentowane w ASCII. Więc +1 ode mnie.type(title) == unicode and type(title.encode('utf-8')) == str
. Nie ma potrzeby uszkadzania danych wejściowych, aby uzyskać bajtowanie, które można zapisać w pliku.Możesz użyć kodowania na ASCII, jeśli nie musisz tłumaczyć znaków innych niż ASCII:
źródło
ignore
vsreplace
a.encode('ascii', 'xmlcharrefreplace')
daje'aaaàçççñññ'
.type(a)
jeststr
w Pythonie 3.6.8 i nie ma żadnejencode()
metody.Jeśli ciąg zawiera tylko znaki ascii.
źródło
Jeśli masz ciąg Unicode i chcesz zapisać go w pliku lub w innej postaci zserializowanej, musisz najpierw zakodować go w określonej reprezentacji, która może być przechowywana. Istnieje kilka typowych kodowań Unicode, takich jak UTF-16 (używa dwóch bajtów dla większości znaków Unicode) lub UTF-8 (1-4 bajty / punkt kodowy w zależności od znaku) itp. Aby przekonwertować ten ciąg na określone kodowanie, należy mogą korzystać:
Ten nieprzetworzony ciąg bajtów można zapisać do pliku. Pamiętaj jednak, że podczas odczytywania go ponownie musisz wiedzieć, w jakim jest kodowaniu i zdekodować go przy użyciu tego samego kodowania.
Pisząc do plików, możesz pozbyć się tego ręcznego procesu kodowania / dekodowania za pomocą modułu kodeków . Aby otworzyć plik, który koduje wszystkie ciągi Unicode w UTF-8 , użyj:
Pamiętaj, że wszystko, co korzysta z tych plików, musi zrozumieć, w jakim kodowaniu znajduje się plik, jeśli chce je odczytać. Jeśli tylko ty czytasz / piszesz, nie stanowi to problemu, w przeciwnym razie upewnij się, że piszesz w formie zrozumiałej dla innych osób korzystających z plików.
W Pythonie 3 ta forma dostępu do plików jest domyślna, a wbudowana
open
funkcja pobiera parametr kodowania i zawsze tłumaczy na / z ciągów Unicode (domyślny obiekt ciągu w Pythonie 3) dla plików otwieranych w trybie tekstowym.źródło
Oto przykład:
źródło
utf8
jak pokazano tutaj, wynikiem są tylko znaki zapytania? Oto obraz mojego Pythona, wersja 2.7.13. (Mogę zakodować inne obiekty Unicode, takie jaku"Klüft"
euro, ale nie euro?)Cóż, jeśli chcesz / jesteś gotowy na przejście na Python 3 (co może nie wynikać z niezgodności wstecznej z niektórymi kodami Python 2), nie musisz wykonywać żadnej konwersji; cały tekst w Pythonie 3 jest reprezentowany przez ciągi Unicode, co oznacza również, że nie trzeba już używać
u'<text>'
składni. Masz również, w rzeczywistości, ciągi bajtów, które są używane do reprezentowania danych (które mogą być ciągami kodowanymi).http://docs.python.org/3.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit
(Oczywiście, jeśli obecnie używasz języka Python 3, problem prawdopodobnie wiąże się ze sposobem zapisania tekstu w pliku).
źródło
Oto przykładowy kod
źródło
plik zawiera ciąg znaków w formacie Unicode
dla mnie
źródło
result.encode().decode('unicode-escape')
Żadna odpowiedź nie zadziałała w moim przypadku, w którym miałem zmienną łańcuchową zawierającą znaki Unicode, a żadne wyjaśnione tutaj kodowanie-dekodowanie nie zadziałało.
Jeśli zrobię to w terminalu
lub
Dane wyjściowe są poprawne:
Ale praca ze skryptami ładującymi tę zmienną łańcuchową nie działała.
Oto, co zadziałało w mojej sprawie , na wypadek gdyby ktoś pomógł:
źródło