Bez dalszego kontekstu powiedziałbym, że maksymalna liczba bajtów na znak w UTF-8 to
odpowiedź: 6 bajtów
Autor zaakceptowanej odpowiedzi poprawnie wskazał to jako „specyfikację oryginalną”. Było to ważne przez RFC-2279 1 . Jak zauważył J. Cocoe w komentarzach poniżej, zmieniło się to w 2003 r. Wraz z RFC-3629 2 , który ogranicza kodowanie UTF-8 do 21 bitów, które można obsługiwać za pomocą schematu kodowania wykorzystującego cztery bajty.
odpowiedz, jeśli obejmuje cały Unicode: 4 bajty
Ale w Javie <= v7 mówią o maksimum 3 bajtów do reprezentowania Unicode z UTF-8? Dzieje się tak, ponieważ oryginalna specyfikacja Unicode definiowała tylko podstawową płaszczyznę wielojęzyczną ( BMP ), tj. Jest to starsza wersja Unicode lub podzbiór współczesnego Unicode. Więc
odpowiedź, jeśli reprezentuje tylko oryginalny Unicode, BMP: 3 bajty
Ale OP mówi o pójściu w drugą stronę. Nie od znaków do bajtów UTF-8, ale od bajtów UTF-8 do „Ciągu” reprezentacji bajtów. Być może autor przyjętej odpowiedzi wyciągnął to z kontekstu pytania, ale niekoniecznie jest to oczywiste, więc może zdezorientować przypadkowego czytelnika tego pytania.
Przechodząc od kodowania UTF-8 do kodowania natywnego, musimy przyjrzeć się, jak zaimplementowano „ciąg znaków”. Niektóre języki, takie jak Python> = 3, będą reprezentować każdy znak za pomocą całkowitych punktów kodowych, co pozwala na 4 bajty na znak = 32 bity na pokrycie 21 potrzebnych nam dla Unicode, z pewnymi stratami. Dlaczego nie dokładnie 21 bitów? Ponieważ rzeczy są szybsze, gdy są wyrównane do bajtów. Niektóre języki, takie jak Python <= 2 i Java, reprezentują znaki przy użyciu kodowania UTF-16, co oznacza, że muszą używać par zastępczych do reprezentowania rozszerzonego Unicode (nie BMP). Tak czy inaczej, to nadal maksymalnie 4 bajty.
odpowiedź, jeśli przechodzisz do UTF-8 -> kodowanie natywne: 4 bajty
Tak więc, ostateczny wniosek, 4 to najczęstsza prawidłowa odpowiedź, więc mamy rację. Ale przebieg może się różnić.