Jaka jest różnica między Unicode a UTF-8? [duplikat]

to pytanie ma już odpowiedzi tutaj : Jaka jest różnica między UTF-8 a Unicode? (15 odpowiedzi) Zamknięty 4 lata temu .

Rozważmy:

Alt text

Czy to prawda, że unicode=utf16?

Wiele osób twierdzi, że Unicode jest standardem, a nie kodowaniem, ale większość edytorów obsługuje kodowanie save as Unicode encoding.
 228
Author: Peter Mortensen, 2010-10-17

9 answers

Większość edytorów obsługuje kodowanie save jako' Unicode'.

To niefortunna pomyłka popełniona przez Windows.

Ponieważ System Windows używa kodowania UTF-16LE wewnętrznie jako formatu pamięci dla ciągów Unicode, uważa to za naturalne kodowanie tekstu Unicode. W świecie Windows istnieją ciągi ANSI (strona kodowa systemu na bieżącej maszynie, z zastrzeżeniem całkowitej nieportability) i istnieją ciągi Unicode (przechowywane wewnętrznie jako UTF-16LE).

Wszystko to zostało wymyślone we wczesnych czasach Unicode, zanim zdaliśmy sobie sprawę, że UCS-2 nie wystarcza, i zanim UTF-8 został wynaleziony. Z tego powodu obsługa UTF-8 w systemie Windows jest bardzo słaba.

Ten błędny schemat nazewnictwa stał się częścią interfejsu użytkownika. Edytor tekstu, który wykorzystuje obsługę kodowania systemu Windows do zapewnienia zakresu kodowania, automatycznie i niewłaściwie opisuje UTF-16LE jako "Unicode" , a UTF-16be, jeśli jest dostępny, jako " Unicode big-endian".

(inne edytory, które same kodują, jak Notepad++, nie mają tego problemu.)

Jeśli to sprawi, że poczujesz się lepiej, ciągi 'ANSI' również nie są oparte na żadnym standardzie ANSI.

 172
Author: bobince,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-12 23:38:43

Jak stwierdza Rasmus w swoim artykule " różnica między UTF-8 a Unicode?":

Jeśli zadano pytanie, " Jaka jest różnica między UTF-8 a Unicode?", czy z pewnością odpowiesz krótkim i precyzyjnym odpowiedz? W dzisiejszych czasach internacjonalizacji wszyscy deweloperzy powinni być / align = "left" / Podejrzewam, że wielu z nas nie rozumie tych pojęć tak jak powinniśmy. Jeśli czujesz, że należysz do tej grupy, powinieneś przeczytaj ten ultra krótki wstęp do zestawy znaków i kodowania.

Właściwie porównywanie UTF-8 i Unicode jest jak porównywanie jabłek i pomarańcze: {]}

UTF - 8 jest kodowaniem-Unicode jest znakiem zestaw

Zestaw znaków to lista znaków o unikalnych numerach (te liczby są czasami określane jako "Punkty kodowe"). Na przykład w zestaw znaków Unicode, liczba a wynosi 41.

Kodowanie z drugiej strony jest algorytmem, który tłumaczy lista liczb do binarnych więc może być przechowywany na dysku. Na przykład UTF-8 przetłumaczyłby ciąg liczb 1, 2, 3, 4 w następujący sposób:

00000001 00000010 00000011 00000100 

Nasze dane są teraz tłumaczone na binarne i można je teraz zapisać do dysk.

Teraz wszyscy razem

Powiedzmy, że aplikacja odczytuje z dysku:

1101000 1100101 1101100 1101100 1101111 

Aplikacja wie, że te dane reprezentują ciąg Unicode zakodowany z UTF-8 i musi pokazać to jako tekst użytkownikowi. Pierwszym krokiem jest Konwertuj dane binarne na liczby. Aplikacja wykorzystuje algorytm UTF-8 na rozszyfruj dane. W tym przypadku dekoder zwraca to:

104 101 108 108 111 

Ponieważ aplikacja wie, że jest to ciąg znaków Unicode, może przyjąć każdy liczba reprezentuje znak. Używamy zestawu znaków Unicode do Przetłumacz każdą liczbę na odpowiedni znak. W wyniku string to "cześć".

Podsumowanie

Więc kiedy ktoś cię zapyta " Jaka jest różnica między UTF-8 a Unicode?", możesz teraz pewnie odpowiedzieć krótko i precyzyjnie:

UTF-8 (transformacja Unicode Format) i Unicode nie mogą być porównywane. UTF-8 jest kodowaniem służy do tłumaczenia liczb na dane binarne. Unicode to zestaw znaków służy do tłumaczenia znaków na liczby.

 644
Author: vikas devde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-04 10:59:56

To nie takie proste.

UTF-16 jest 16-bitowym kodowaniem o zmiennej szerokości. Samo nazywanie czegoś "Unicode" jest niejednoznaczne, ponieważ "Unicode" odnosi się do całego zestawu standardów dla kodowania znaków. Unicode to a nie kodowanie!

Http://en.wikipedia.org/wiki/Unicode#Unicode_Transformation_Format_and_Universal_Character_Set

I oczywiście obowiązkowy Joel on Software - absolutne Minimum każdego programisty Absolutnie, pozytywnie musi wiedzieć o Unicode i zestawach znaków (bez wymówek!) link.

 31
Author: Matt Ball,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-17 02:28:45

Jest tu wiele nieporozumień. Unicode nie jest kodowaniem Ani, ale standard Unicode i tak jest przeznaczony przede wszystkim do kodowania.

ISO 10646 to międzynarodowy zestaw znaków, na którym (prawdopodobnie) ci zależy. Definiuje odwzorowanie pomiędzy zestawem nazwanych znaków (np. " łacińska Wielka Litera A "lub" grecka mała litera alfa") a zestawem punktów kodu (liczba przypisana do każdego z nich-na przykład 61 szesnastkowy i 3B1 szesnastkowy dla tych dwóch odpowiednio; w przypadku punktów kodowych Unicode standardową notacją będzie U + 0061 i U + 03B1).

W pewnym momencie Unicode zdefiniował swój własny zestaw znaków, mniej więcej jako konkurent dla ISO 10646. Był to 16-bitowy zestaw znaków, ale był to , A NIE UTF-16; był znany jako UCS-2. Zawierała ona dość kontrowersyjną technikę polegającą na próbach ograniczenia liczby niezbędnych znaków do minimum (zjednoczenie Han-zasadniczo traktując chińskie, japońskie i koreańskie znaki, które były dość podobne do siebie, jako ten sam znak).

Od tego czasu Konsorcjum Unicode milcząco przyznało, że to nie zadziała, a teraz koncentruje się przede wszystkim na sposobach kodowania zestawu znaków ISO 10646. Podstawowe metody to UTF-8, UTF-16 i UCS-4 (aka UTF-32). Te (z wyjątkiem UTF-8) mają również warianty LE (little endian) I BE (big-endian).

Sam w sobie, "Unicode" może odnosić się do prawie każdego z powyższych (chociaż prawdopodobnie możemy wyeliminować inne, które pokazuje jawnie, takie jak UTF-8). Niewykwalifikowane użycie "Unicode" zdarza się prawdopodobnie najczęściej na Windows, gdzie prawie na pewno będzie odnosić się do UTF-16. Wczesne wersje Windows NT przyjęły Unicode, gdy UCS-2 był obecny. Po tym, jak UCS-2 został uznany za przestarzały (wokół Win2k, jeśli pamięć służy), przełączyli się na UTF-16, który jest najbardziej podobny do UCS-2 (w rzeczywistości jest identyczny dla znaków w "podstawowej płaszczyźnie wielojęzycznej", która obejmuje wiele, w tym wszystkie znaki dla większości języków zachodnioeuropejskich).

 19
Author: Jerry Coffin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-17 03:05:48

UTF - 16 i UTF-8 są kodowaniem Unicode. Są oba Unicode; jeden nie jest więcej Unicode niż drugi.

Niech nie zmyli cię niefortunny artefakt historyczny Microsoftu.

 13
Author: Mark Ransom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-17 03:19:53

Rozwój Unicode miał na celu przy tworzeniu nowego standardu mapowania postaci w zdecydowanej większości języki, które są dziś używane, wraz z innymi postaciami, które są nie tak istotne, ale może być niezbędne do wytworzenia tekstu. UTF-8 jest tylko jednym z wielu sposobów, że może kodować pliki, ponieważ są na wiele sposobów można zakodować znaki wewnątrz pliku do Unicode.

Źródło:

Http://www.differencebetween.net/technology/difference-between-unicode-and-utf-8/

 6
Author: Trufa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-17 02:19:47

Oprócz komentarza Trufa, Unicode jawnie nie jest UTF-16. Kiedy po raz pierwszy przyglądali się Unicode, spekulowano, że 16-bitowa liczba całkowita może wystarczyć do przechowywania dowolnego kodu, ale w praktyce okazało się, że tak nie jest. Jednak UTF-16 jest kolejnym poprawnym kodowaniem Unicode-obok 8-bitowych i 32-bitowych wariantów - i wierzę, że jest to kodowanie, które Microsoft używa w pamięci w czasie wykonywania w systemach operacyjnych opartych na NT.

 3
Author: Tommy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-04 18:23:50

Zacznijmy od tego, że dane są przechowywane jako bajty; Unicode jest zestawem znaków, w którym znaki są mapowane do punktów kodu( unikalne liczby całkowite), i potrzebujemy czegoś, aby przetłumaczyć te dane punktów kodu na bajty. Właśnie tam UTF-8 wchodzi w tzw. kodowanie-proste!

 2
Author: mrehan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-04 18:27:13

To dziwne. Unicode jest standardem, a nie kodowaniem. Jak można określić endianness to chyba faktycznie UTF-16 A może 32.

Skąd to menu?

 1
Author: MatTheCat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-04 18:23:08