Jak pracować z Unicode w Pythonie
Wprowadzenie
Unicode to uniwersalny standard kodowania znaków, który umożliwia reprezentację znaków z różnych języków i systemów pisma. W Pythonie Unicode obsługiwany jest w sposób natywny, co czyni go potężnym narzędziem do pracy z tekstem międzynarodowym. W tym artykule przedstawimy szczegółowy przewodnik po pracy z Unicode w Pythonie, obejmujący kodowanie, dekodowanie, normalizację i inne zagadnienia.
Kodowanie Unicode
Unicode jest reprezentowany jako sekwencja liczb całkowitych zwanych „punktami kodowymi”. Każdemu znakowi przypisany jest unikalny punkt kodowy, który określa jego reprezentację. W Pythonie punkty kodowe Unicode można reprezentować jako obiekty int
lub str
:
python
punkt_kodowy_a = 97
Spis treści:
kod ASCII dla litery "a"
znak_a = "a"
kod Unicode dla litery "a"
Można przekonwertować obiekty str
na punkty kodowe Unicode za pomocą funkcji ord()
i odwrotnie za pomocą funkcji chr()
:
python
punkt_kodowy_b = ord("b")
kod ASCII dla litery "b"
znak_b = chr(98)
kod Unicode dla litery "b"
Dekodowanie Unicode
Po zakodowaniu tekstu w Unicode można go zdekodować z powrotem do postaci tekstowej przy użyciu funkcji decode()
. Funkcja ta przyjmuje zestaw kodowania, który określa, jak sekwencja bajtów jest mapowana na punkty kodowe Unicode:
python
zakodowany_tekst = b"\u0061\u0062\u0063"
zakodowany tekst Unicode
dekodowany_tekst = zakodowany_tekst.decode("utf-8")
dekoder za pomocą kodowania UTF-8
print(dekodowany_tekst)
wydrukuje "abc"
Normalizacja Unicode
Normalizacja Unicode to proces przekształcania tekstu Unicode w postaci kanonicznej w celu zapewnienia jednolitej reprezentacji znaków. Są dwa główne rodzaje normalizacji:
* Normalization Form Canonical (NFC): Przekształca znaki prekomponowane w ich postaci pojedynczych znaków Unicode.
* Normalization Form Compose (NFC): Przekształca znaki pojedyncze w ich postaci prekomponowane.
W Pythonie normalizację można wykonać za pomocą modułu unicodedata
:
python
import unicodedata
tekst = "café"
tekst_znormalizowany_nfc = unicodedata.normalize("NFC", tekst)
tekst_znormalizowany_nfkc = unicodedata.normalize("NFKC", tekst)
print(tekst_znormalizowany_nfc)
wydrukuje "café"
print(tekst_znormalizowany_nfkc)
wydrukuje "cafe"
Reprezentacje łańcuchowe Unicode
W Pythonie istnieją trzy główne typy reprezentacji łańcuchowych Unicode:
* Łańcuchy Unicode (u””): Zawierają znaki Unicode reprezentowane jako punkty kodowe.
* Łańcuchy bajtów (b””): Zawierają zakodowany tekst Unicode.
* Łańcuchy formatowane (f””): Umożliwiają wstawianie formatowanych znaków Unicode do łańcuchów.
Porównanie łańcuchów Unicode
Porównywanie łańcuchów Unicode może być złożone ze względu na różne formy reprezentacji. W Pythonie należy używać funkcji unicodedata.normalize()
w celu normalizacji łańcuchów Unicode przed porównaniem, aby zapewnić dokładne wyniki:
python
tekst1 = "café"
tekst2 = "café"
if unicodedata.normalize("NFC", tekst1) == unicodedata.normalize("NFC", tekst2):
print("Łańcuchy są równe")
else:
print("Łańcuchy są różne")
Unicode w systemach wejściowych i wyjściowych
Obsługa Unicode w systemach wejściowych i wyjściowych jest niezbędna dla aplikacji obsługujących międzynarodowy tekst. W Pythonie można skonfigurować kodowanie konsoli i plików za pomocą funkcji sys.stdout.encoding
i open()
, odpowiednio:
python
import sys
Ustaw kodowanie konsoli na UTF-8
sys.stdout.encoding = "utf-8"
Otwórz plik z kodowaniem UTF-8
with open("plik.txt", "w", encoding="utf-8") as f:
f.write("Tekst w języku polskim")
Wnioski
Unicode jest kluczowy dla pracy z międzynarodowym tekstem w Pythonie. Zapewnia standardowy sposób reprezentowania znaków z różnych języków i systemów pisma. Poznanie technik obsługi Unicode omówionych w tym artykule pozwoli Ci tworzyć aplikacje zdolne do obsługi tekstów międzynarodowych w sposób niezawodny i wydajny.
Często zadawane pytania
1. Co to jest Unicode?
Unicode to uniwersalny standard kodowania znaków, który umożliwia reprezentację znaków z różnych języków i systemów pisma.
2. Jak zakodować tekst w Unicode w Pythonie?
Możesz zakodować tekst w Unicode, konwertując znaki na punkty kodowe Unicode za pomocą funkcji ord()
.
3. Jak zdekodować tekst Unicode w Pythonie?
Aby zdekodować tekst Unicode, użyj funkcji decode()
z określonym zestawem kodowania.
4. Co to jest normalizacja Unicode?
Normalizacja Unicode to proces przekształcania tekstu Unicode w postaci kanonicznej w celu zapewnienia jednolitej reprezentacji znaków.
5. Jak porównać łańcuchy Unicode w Pythonie?
Przed porównaniem łańcuchów Unicode należy użyć funkcji unicodedata.normalize()
w celu normalizacji, aby zapewnić dokładne wyniki.
6. Jak skonfigurować obsługę Unicode w systemach wejściowych i wyjściowych w Pythonie?
Możesz użyć funkcji sys.stdout.encoding
i open()
do skonfigurowania kodowania konsoli i plików odpowiednio.
7. Jakie są trzy główne typy reprezentacji łańcuchowych Unicode w Pythonie?
Łańcuchy Unicode (u””), łańcuchy bajtów (b””) i łańcuchy formatowane (f””).
8. Jak wstawić formatowane znaki Unicode do łańcuchów w Pythonie?
Użyj łańcuchów formatowanych (f””) i określacza formatowania \u
połączonego z punktem kodowym Unicode.
9. Czy Unicode obsługuje wszystkie języki na świecie?
Tak, Unicode jest zaprojektowany tak, aby obsługiwać wszystkie języki znane ludzkości.
10. Czy istnieją jakieś narzędzia do pracy z Unicode w Pythonie?
Tak, są takie biblioteki jak unicodedata
, re
i string
, które zapewniają przydatne funkcje do pracy z Unicode.