Wat is het verschil tussen UTF-8 en ISO-8859-1?

Wat is het verschil tussen UTF-8en ISO-8859-1?


Antwoord 1, autoriteit 100%

UTF-8 is een multibyte-codering die elk Unicode-teken kan vertegenwoordigen. ISO 8859-1 is een codering van één byte die de eerste 256 Unicode-tekens kan vertegenwoordigen. Beide coderen ASCII op precies dezelfde manier.


Antwoord 2, autoriteit 41%

Wikipedia legt beide redelijk goed uit: UTF-8vs Latin-1(ISO-8859-1). De eerste is een codering met variabele lengte, de laatste codering met een vaste lengte van één byte.
Latin-1 codeert alleen de eerste 256 codepunten van de Unicode-tekenset, terwijl UTF-8 kan worden gebruikt om alle codepunten te coderen. Op fysiek coderingsniveau worden alleen codepunten 0 – 127 identiek gecodeerd; codepunten 128 – 255 verschillen doordat ze een reeks van 2 bytes worden met UTF-8, terwijl ze enkele bytes zijn met Latin-1.


Antwoord 3, autoriteit 26%

UTF

UTFis een familie van multi-byte coderingsschema’s die Unicode-codepunten die representatief kunnen zijn voor maximaal 2^31 [ongeveer 2 miljard] tekens. UTF-8is een flexibel coderingssysteem dat tussen de 1 en 4 bytes gebruikt om de eerste 2^21 [ongeveer 2 miljoen] codepunten.

Om een ​​lang verhaal kort te maken: elk teken met een codepunt/ordinale representatie lager dan 127, oftewel 7-bit-safe ASCII, wordt vertegenwoordigd door dezelfde 1-byte-reeks als de meeste andere single-byte-coderingen. Elk teken met een codepunt hoger dan 127 wordt weergegeven door een reeks van twee of meer bytes, waarbij de bijzonderheden van de codering het best worden uitgelegd hier.

ISO-8859

ISO-8859is een familie van enkelbyte-coderingsschema’s die worden gebruikt om alfabetten weer te geven die kan worden weergegeven binnen het bereik van 127 tot 255. Deze verschillende alfabetten worden gedefinieerd als “delen” in het formaat ISO-8859-n, waarvan de meest bekende waarschijnlijk ISO-8859-1ook bekend als ‘Latin-1’. Net als bij UTF-8 blijft 7-bits veilige ASCII onaangetast, ongeacht de gebruikte coderingsfamilie.

Het nadeel van dit coderingsschema is dat het niet geschikt is voor talen die uit meer dan 128 symbolen bestaan, of om veilig meer dan één familie symbolen tegelijk weer te geven. Ook zijn ISO-8859-coderingen uit de gratie geraakt met de opkomst van UTF. De ISO-werkgroep die er de leiding over had, is in 2004 ontbonden en het onderhoud overgelaten aan de bovenliggende subcommissie.


Antwoord 4, autoriteit 8%

  • ASCII: 7 bits. 128 codepunten.

  • ISO-8859-1: 8 bits. 256 codepunten.

  • UTF-8: 8-32 bits (1-4 bytes). 1.112.064 codepunten.

Zowel ISO-8859-1 als UTF-8 zijn achterwaarts compatibel met ASCII, maar UTF-8 is niet achterwaarts compatibel met ISO-8859-1:

#!/usr/bin/env python3
c = chr(0xa9)
print(c)
print(c.encode('utf-8'))
print(c.encode('iso-8859-1'))

Uitvoer:

©
b'\xc2\xa9'
b'\xa9'

Antwoord 5, autoriteit 7%

ISO-8859-1 is een oude standaard uit de jaren 80. Het kan slechts 256 tekens vertegenwoordigen, dus alleen geschikt voor sommige talen in de westerse wereld. Zelfs voor veel ondersteunde talen ontbreken enkele tekens. Als u een tekstbestand in deze codering aanmaakt en enkele Chinese karakters probeert te kopiëren/plakken, zult u vreemde resultaten zien. Dus met andere woorden, gebruik het niet. Unicode heeft de wereld overgenomen en UTF-8 is tegenwoordig zo’n beetje de standaard, tenzij je een aantal oude redenen hebt (zoals HTTP-headers die met alles compatibel moeten zijn).


Antwoord 6

Nog iets belangrijks om te beseffen: als je iso-8859-1ziet, verwijst dit waarschijnlijk naar Windows-1252in plaats van ISO/IEC 8859- 1. Ze verschillen in het bereik 0x80.0x9F, waar ISO 8859-1 de C1-controlecodes heeft en Windows-1252 in plaats daarvan nuttige zichtbare tekens heeft.

Bijvoorbeeld, ISO 8859-1 heeft 0x85 als stuurteken (in Unicode, U+0085, “), terwijl Windows-1252 een horizontale ellips heeft (in Unicode U+2026 HORIZONTALE ELLIPSIS, ).

De WHATWG Encoding spec(zoals gebruikt door HTML) verklaart uitdrukkelijk iso-8859-1om een ​​label te zijn voor windows-1252, en webbrowsers ondersteunen op geen enkele manier ISO 8859-1: de HTML-specificatie zegt dat alle coderingen in de De coderingsspecificaties moeten worden ondersteund, en niet meer.

Ook interessant: verwijzingen naar numerieke HTML-tekens gebruiken in wezen Windows-1252 voor 8-bits waarden in plaats van Unicode-codepunten; per https://html.spec.whatwg.org/#numeric- character-reference-end-state, …zal U+2026 produceren in plaats van U+0085.


Antwoord 7

Vanuit een ander perspectief lijken bestanden die zowel unicode- als ascii-coderingen niet kunnen lezen omdat ze een byte 0xc0in zich hebben, correct gelezen te worden door iso-8859-1. Het voorbehoud is dat het bestand natuurlijk geen unicode-tekens mag bevatten.


Antwoord 8

Mijn reden om deze vraag te onderzoeken was vanuit het perspectief, op welke manier zijn ze compatibel. Latin1 charset (iso-8859) is 100% compatibel om te worden opgeslagen in een utf8 datastore. Alle ascii & extended-ascii-tekens worden opgeslagen als single-byte.

De andere kant op, van utf8 naar Latin1 charset kan wel of niet werken. Als er tekens van 2 bytes zijn (tekens die verder gaan dan extended-ascii 255), worden deze niet opgeslagen in een Latin1-gegevensopslag.

Other episodes