Bez dalszego kontekście chciałbym powiedzieć, że maksymalna liczba bajtów na postać w UTF-8 jest
odpowiedź: 6 bajtów
Autor przyjętej odpowiedzieć poprawnie wskazywał na to, jak " oryginalna specyfikacja ", ale myślę, że to wprowadza w błąd czytelnika, ponieważ o ile mi wiadomo, jest to nadal aktualna i prawidłowa specyfikacja, za wikipedia, i za a Google book on UTF-8 in Java.
RFC mowa w przyjętych państw odpowiedź, że tylko cztery bajty są istotne dla kodowania UTF-16, tak że jest prawidłowa tylko jeśli dodamy kontekstowe
odpowiedź, jeśli tłumaczenia tylko znaki z UTF-16 do UTF- 8: 4 bajty
Teraz, czy wszystkie znaki, które mogą być reprezentowane przez UTF-16, są użyteczne? Według wikipedia again, kodowanie Unicode może wynosić do punktów kodowych x10FFFF. Zatem, w tym 0, oznacza to, że możemy to zrobić za pomocą tych bajtów: F FF FF, tj. Dwa i pół bajty lub 20 bitów. Patrząc wstecz na specyfikację UTF-8 widzimy, że możemy reprezentować 20 bitów z maksymalnie czterema bajtami zakodowanymi w UTF-8. Więc
odpowiedź jeśli obejmujące wszystkie unicode: 4 bajty
Ale w Java <= v7, mówią o maksymalnie 3 bajtów do reprezentowania Unicode UTF-8? Wynika to z faktu, że oryginalna specyfikacja unikodu definiowała tylko podstawową płaszczyznę wielojęzyczną (BMP), tj. Jest starszą wersją unikodu lub podzbiorem nowoczesnego unicodu. Więc
odpowiedź, jeśli stanowią jedynie oryginalne Unicode, BMP: 3 bajty
Ale PO mówi o idzie w drugą stronę. Nie od znaków do bajtów UTF-8, ale od bajtów UTF-8 do "String" reprezentacji bajtów. Być może autor przyjętej odpowiedzi zrozumiał to z kontekstu pytania, ale niekoniecznie jest to oczywiste, więc może zmylić przypadkowego czytelnika tego pytania.
Przechodząc z UTF-8 do kodowania natywnego, musimy sprawdzić, w jaki sposób implementowany jest "łańcuch znaków". Niektóre języki, takie jak Python> = 3, będą reprezentowały każdy znak z liczbą całkowitą punktów kodowych, co pozwala na 4 bajty na znak = 32 bity, aby pokryć 20, które potrzebujemy do unicodu, z pewnymi stratami. Dlaczego nie dokładnie 20 bitów? Ponieważ rzeczy są szybsze, gdy są wyrównane do bajtu. Niektóre języki, takie jak Python < = 2 i Java, reprezentują znaki przy użyciu kodowania UTF-16, co oznacza, że muszą używać zastępczych par reprezentujących rozszerzony kod Unicode (nie BMP). Tak czy inaczej nadal 4 bajty maksimum.
odpowiedź, jeśli idzie UTF-8 -> kodowanie natywne: 4 bajty
Tak, ostateczna konkluzja, 4 jest najczęstszą odpowiedzią prawo, więc mamy go w prawo. Ale w pewnych kontekstach powinieneś być ostrożny. Np. Nie oczekuj, że możesz reprezentować wszystko, co czytasz ze strumienia UTF-8 w maksymalnie 4 bajtach. Jeśli nie jest to kodowanie Unicode, możesz potrzebować do 6 bajtów.
Udało Ci się * spojrzeć na wspólne zasoby, takie jak [artykuł Wikipedii UTF-8] (http://en.wikipedia.org/wiki/UTF-8), najpierw ... prawda? –
Przeczytałem kilka artykułów, które dały mieszane odpowiedzi ... Naprawdę odniosłem wrażenie, że odpowiedź była 3, więc bardzo się cieszę, że zapytałem – Edd
Zostawię tu link youtube, zawierający postacie Toma Scotta, symbole, cud Unicode: https: //goo.gl/sUr1Hf. Usłyszysz i zobaczysz, jak wszystko ewoluuje od kodowania znaków ASCII do utf-8. – Roylee