Jaka jest różnica między UTF i LUW.
Kodowanie UCS ma ustaloną szerokość i jest oznaczane liczbą bajtów dla każdego znaku. Na przykład UCS-2 wymaga 2 bajtów na znak. Znaki z punktami kodowania poza dostępnym zakresem nie mogą być zakodowane w kodowaniu UCS.
Kodowanie UTF ma zmienną szerokość i jest oznaczone minimalną liczbą bitów do zapisania znaku. Na przykład kodowanie UTF-16 wymaga co najmniej 16 bitów (2 bajty) na znak. Znaki z dużymi punktami kodowania są kodowane przy użyciu większej liczby bajtów - 4 bajty dla znaków astralnych w UTF-16.
- wewnętrzna reprezentacja wewnątrz kodu
- Najlepsza reprezentacja przechowywania (tj W pliku)
- Najlepszy formatu transportowego drut (transfer pomiędzy aplikacją, która może być na różnych architekturach i mają inny standardowego locale)
Dla nowoczesnych systemów, najbardziej sensowne kodowanie w pamięci i transporcie to UTF-8. Istnieją specjalne przypadki, w których inne mogą być odpowiednie - UTF-7 dla starych serwerów pocztowych, UTF-16 dla słabo napisanych edytorów tekstu - ale najczęściej występuje UTF-8.
Preferowana reprezentacja wewnętrzna zależy od platformy. W systemie Windows jest to UTF-16. W systemie UNIX to UCS-4. Każdy ma swoje zalety:
- Ciągi UTF-16 nigdy nie używają więcej pamięci niż ciąg UCS-4. Jeśli przechowujesz wiele dużych ciągów znaków ze znakami głównie w podstawowej płaszczyźnie wielojęzycznej (BMP), UTF-16 będzie wymagać o wiele mniej miejsca niż UCS-4. Poza BMP będzie korzystać z tej samej kwoty.
- UCS-4 jest łatwiejsze do zrozumienia. Ponieważ znaki UTF-16 mogą być podzielone na wiele "par zastępczych", może to być trudne, aby poprawnie podzielić lub wyrenderować ciąg znaków. Tekst UCS-4 nie ma tego problemu. UCS-4 działa podobnie jak tekst ASCII w tablicach "char", więc istniejące algorytmy tekstowe można łatwo przenosić.
Wreszcie niektóre systemy używają formatu UTF-8 jako formatu wewnętrznego. Jest to dobre, jeśli potrzebujesz współdziałać z istniejącymi systemami opartymi na ASCII lub ISO-8859, ponieważ NULL nie zawiera bajtów w środku tekstu UTF-8 - są one w UTF-16 lub UCS-4.
Nie, kodowanie UTF nie zawsze ma zmienną szerokość (na przykład kodowanie UTF-32). – bortzmeyer
Utf-32 może używać stałej szerokości dla każdego punktu kodowania, ale ja * myślę, że * nadal możesz mieć (i musisz zaakceptować i znormalizować jeden punkt kodowy) wiele punktów kodowych (gdy masz połączenie znaków), które reprezentują jeden pełny znak/glif. Jeśli tak, to UTF-32 nie jest tak naprawdę lepszy od UTF-16. – Shadow2531
@bortzmeyer: UTF-32 to tak naprawdę tylko UCS-4 z kilkoma dodatkowymi ograniczeniami. Szczerze mówiąc, nigdy nie widziałem, aby UTF-32 był używany * w dowolnym miejscu *, więc staram się go po prostu zignorować. –