2013-03-27 18 views
10

Pracuję nad internacjonalizacją jednego z moich programów do pracy. Staram się wykorzystywać foresight, aby uniknąć potencjalnych problemów lub przerobić proces w dół drogi.Jakie języki UTF-8 nie obsługuje?

Widzę odniesienia dla UTF-8, UTF-16 i UTF-32. Moje pytanie jest na dwie części:

  1. Jakie języki UTF-8 nie wsparcia?
  2. Jakie zalety mają UTF-16 i UTF-32 powyżej UTF-8?

Jeśli UTF-8 działa na wszystko, to jestem ciekaw co zaletą UTF-16 i UTF-32 (np są specjalne funkcje wyszukiwania w bazie danych, etc) o zrozumienie powinno pomóc mi skończyć projektowanie mój program (i połączenia z bazą danych) poprawnie. Dzięki!

Odpowiedz

12

Wszystkie trzy są tylko różnymi sposobami reprezentowania tego samego, więc nie ma języków obsługiwanych przez jedno, a nie przez inne.

Czasami UTF-16 jest używany przez system, z którym trzeba współpracować - na przykład, Windows API używa natywnie UTF-16.

W teorii UTF-32 może reprezentować dowolny "znak" w pojedynczej 32-bitowej liczbie całkowitej bez konieczności użycia więcej niż jednego, podczas gdy UTF-8 i UTF-16 muszą używać więcej niż jednego 8-bitowego lub 16-bitowa liczba całkowita do tego. Ale w praktyce, łącząc i nie łącząc warianty niektórych współprowadzeń, nie jest to prawdą.

Jedną z zalet UTF-8 nad innymi jest to, że jeśli masz błąd, który zakłada, że ​​liczba odpowiednio 8, 16 lub 32-bitowych liczb całkowitych jest taka sama jak liczba punktów kodowych, to staje się oczywiste szybciej dzięki UTF-8 - coś zawiedzie, gdy tylko pojawi się tam kodek inny niż ASCII, podczas gdy z UTF-16 błąd może pozostać niezauważony.

Aby odpowiedzieć na pierwsze pytanie, oto lista skryptów aktualnie nieobsługiwanych przez Unicode: http://www.unicode.org/standard/unsupported.html

+0

Czy wiesz, czy istnieją jakieś zalety bazy danych związane z używaniem jednego typu nad drugim? –

+1

Format UTF-8 jest bardziej kompaktowy, głównie z tekstu w języku angielskim, więc prawdopodobnie będzie szybciej. Nie powinieneś znajdować żadnych funkcji bazy danych dostępnych z jednym kodowaniem, a nie z innym. – RichieHindle

7

UTF8 jest zmienny od 1 do 4 bajtów, UTF16 2 lub 4 bajty, UTF32 jest stałe 4 bajty.

Z tego powodu UTF-8 ma przewagę, gdy ASCII są najbardziej rozpowszechnionymi znakami, UTF-16 jest lepszy tam gdzie ASCII nie jest dominujący, UTF-32 obejmie wszystkie możliwe znaki w 4 bajtach.

+0

Większość naszej sprzedaży będzie pochodzić z USA, więc to będzie nasz główny cel ... Chcę prędkości. Opierając się na tym, zakładam, że zgadzasz się, że UTF-8 byłby dla mnie najlepszym wyborem? –

+1

Masz rację, w tym przypadku wziąłbym UTF-8. – duDE

+1

Dzięki temu UTF-8 nigdy nie zajmuje więcej miejsca niż UTF-16, a UTF-16 nigdy nie zajmuje więcej miejsca niż UTF-32; ponadto UTF-8 jest szybszy i zazwyczaj mniej obszerny, głównie ze strunami w stylu ASCII niż pozostałe dwa jako całość, chociaż pozostałe dwa jako całość są szybsze niż UTF-8, gdy operują głównie łańcuchami w stylu innym niż ASCII. Czy to jest poprawne? Jaki jest kompromis między UTF-16 i UTF-32? – Panzercrisis