Wat is het verschil tussen ASCII en Unicode?

Wat is het exacte verschil tussen Unicode en ASCII?

ASCII heeft in totaal 128 tekens (256 in de uitgebreide set).

Is er een formaatspecificatie voor Unicode-tekens?


Antwoord 1, autoriteit 100%

ASCII definieert 128 tekens, die overeenkomen met de nummers 0-127. Unicode definieert (minder dan) 221tekens, die op dezelfde manier worden toegewezen aan de nummers 0–221(hoewel momenteel niet alle nummers zijn toegewezen en sommige zijn gereserveerd).

Unicode is een superset van ASCII en de getallen 0-127 hebben dezelfde betekenis in ASCII als in Unicode. Het getal 65 betekent bijvoorbeeld “Latijnse hoofdletter ‘A'”.

Omdat Unicode-tekens over het algemeen niet in één 8-bits byte passen, zijn er talloze manieren om Unicode-tekens in bytereeksen op te slaan, zoals UTF-32 en UTF-8.


Antwoord 2, autoriteit 79%

Het begrijpen van waaromASCII en Unicode in de eerste plaats zijn gemaakt, heeft me geholpen de verschillen tussen de twee te begrijpen.

ASCII, oorsprong

Zoals vermeld in de andere antwoorden, gebruikt ASCII 7 bits om een teken weer te geven. Door 7 bits te gebruiken, kunnen we maximaal 2^7 (= 128) verschillende combinaties*hebben. Wat betekent dat we maximaal 128 tekens kunnen vertegenwoordigen.

Wacht, 7 bits? Maar waarom niet 1 byte (8 bits)?

Het laatste bit (8e) wordt gebruikt om fouten te voorkomen als pariteitsbit.
Dit was jaren geleden relevant.

De meeste ASCII-tekens zijn afdrukbare tekens van het alfabet, zoals abc, ABC, 123, ?&!, enz. De andere zijn controletekenszoals carriage return, line feed, tab, etc.

Zie hieronder de binaire weergave van enkele tekens in ASCII:

0100101 -> % (Percent Sign - 37)
1000001 -> A (Capital letter A - 65)
1000010 -> B (Capital letter B - 66)
1000011 -> C (Capital letter C - 67)
0001101 -> Carriage Return (13)

Bekijk de volledige ASCII-tabel hier.

ASCII was alleen bedoeld voor Engels.

Wat? Waarom alleen Engels? Er zijn zoveel talen!

Omdat het centrum van de computerindustrie toen in de VS lag
tijd. Als gevolg daarvan hoefden ze geen accenten of andere te ondersteunen
tekens zoals á, ü, ç, ñ, etc. (ook bekend als diakritische tekens).

ASCII Uitgebreid

Sommige slimme mensen begonnen de 8e bit (de bit die voor pariteit wordt gebruikt) te gebruiken om meer tekens te coderen om hun taal te ondersteunen (ter ondersteuning van “é”, bijvoorbeeld in het Frans). Door slechts één extra bit te gebruiken, verdubbelde de grootte van de originele ASCII-tabel om maximaal 256 tekens (2^8 = 256 tekens) toe te wijzen. En niet 2^7 zoals voorheen (128).

10000010 -> é (e with acute accent - 130)
10100000 -> á (a with acute accent - 160)

De naam voor deze “ASCII uitgebreid tot 8 bits en niet 7 bits zoals voorheen” zou gewoon “uitgebreide ASCII” of “8-bit ASCII” kunnen worden genoemd.

Zoals @Tomin zijn opmerking hieronder aangaf, bestaat er niet zoiets als “extended ASCII” maar dit is een gemakkelijke manier om naar deze 8e-bits truc te verwijzen. Er zijn veel variaties op de 8-bits ASCII-tabel, bijvoorbeeld de ISO 8859-1, ook wel ISO Latin-1.

Unicode, de opkomst

ASCII Extended lost het probleem op voor talen die gebaseerd zijn op het Latijnse alfabet… en de anderen hebben een heel ander alfabet nodig? Grieks? Russisch? Chinees en dergelijke?

We zouden een geheel nieuwe tekenset nodig hebben gehad… dat is de gedachte achter Unicode. Unicode bevat niet elk teken uit elke taal, maar het bevat wel een gigantisch aantal tekens (zie deze tabel).

U kunt geen tekst op uw harde schijf opslaan als “Unicode”. Unicode is een abstracte weergave van de tekst. U moet deze abstracte representatie “coderen”. Dat is waar een coderingin het spel komt.

Codes: UTF-8 versus UTF-16 versus UTF-32

Dit antwoordis redelijk goed in het uitleggen van de basis:

  • UTF-8 en UTF-16 zijn coderingen van variabele lengte.
  • In UTF-8 mag een teken minimaal 8 bits in beslag nemen.
  • In UTF-16 begint een tekenlengte met 16 bits.
  • UTF-32 is een codering met een vaste lengte van 32 bits.

UTF-8 gebruikt de ASCII-set voor de eerste 128 tekens. Dat is handig omdat het betekent dat ASCII-tekst ook geldig is in UTF-8.

Mnemonics:

  • UTF-8: minimaal 8bits.
  • UTF-16: minimaal 16bits.
  • UTF-32: minimum en maximum 32bits.

Opmerking:

Waarom 2^7?

Dit is voor sommigen duidelijk, maar voor het geval dat. We hebben zeven slots beschikbaar gevuld met 0 of 1 (Binaire code).
Elk kan twee combinaties hebben. Als we zeven plekken hebben, hebben we 2 * 2 * 2 * 2 * 2 * 2 * 2 = 2^7 = 128 combinaties. Zie dit als een combinatieslot met zeven wielen, waarbij elk wiel slechts twee cijfers heeft.

Bron: Wikipedia, deze geweldige blogposten Mocki.cowaar ik deze samenvatting oorspronkelijk plaatste.


Antwoord 3, autoriteit 15%

ASCII heeft 128 codepunten, 0 tot en met 127. Het past in een enkele 8-bits byte, de waarden 128 tot en met 255 werden meestal gebruikt voor andere tekens. Met incompatibele keuzes, die de codepaginaramp veroorzaken. Tekst die in een codetabel is gecodeerd, kan niet correct worden gelezen door een programma dat een andere codetabel aanneemt of raadt.

Unicode kwam tot stand om deze ramp op te lossen. Versie 1 begon met 65536 codepunten, meestal gecodeerd in 16 bits. Later in versie 2 uitgebreid tot 1,1 miljoen codepunten. De huidige versie is 6.3 en gebruikt 110.187 van de beschikbare 1,1 miljoen codepunten. Dat past niet meer in 16 bits.

Codering in 16-bits was gebruikelijk toen v2 op de markt kwam, bijvoorbeeld gebruikt door Microsoft en Apple-besturingssystemen. En taalruntimes zoals Java. De v2-specificatie bedacht een manier om die 1,1 miljoen codepunten in 16-bits in kaart te brengen. Een codering genaamd UTF-16, een codering met variabele lengte waarbij één codepunt 2 of 4 bytes kan bevatten. De originele v1 codepunten nemen 2 bytes in beslag, de toegevoegde punten nemen 4 bytes in beslag.

Een andere codering met variabele lengte die veel wordt gebruikt in *nix-besturingssystemen en tools is UTF-8, een codepunt kan tussen 1 en 4 bytes duren, de originele ASCII-codes nemen 1 byte in beslag en de rest duurt meer. De enige niet-variabele lengtecodering is UTF-32, duurt 4 bytes voor een codepunt. Wordt niet vaak gebruikt omdat het nogal verspilling is. Er zijn andere, zoals UTF-1 en UTF-7, die op grote schaal worden genegeerd.

Een probleem met de UTF-16/32-coderingen is dat de volgorde van de bytes afhankelijk is van de endianheid van de machine die de tekststroom heeft gemaakt. Dus voeg aan de mix UTF-16BE, UTF-16LE, UTF-32BE en UTF-32LE toe.

Het hebben van deze verschillende coderingskeuzes brengt de ramp met de codepagina tot op zekere hoogte terug, samen met verhitte debatten tussen programmeurs welke UTF-keuze de “beste” is. Hun associatie met de standaardinstellingen van het besturingssysteem trekt vrijwel de lijnen. Een tegenmaatregel is de definitie van een stuklijst, de Byte Order Mark, een speciaal codepunt (U+FEFF, spatie nulbreedte) aan het begin van een tekststroom die aangeeft hoe de rest van de stroom is gecodeerd. Het geeft zowel de UTF-codering als de endianess aan en is neutraal voor een tekstweergave-engine. Helaas is het optioneel en veel programmeurs claimen hun recht om het weg te laten, dus ongelukken komen nog steeds vrij vaak voor.


Antwoord 4, autoriteit 6%

java biedt ondersteuning voor Unicode, d.w.z. het ondersteunt alle wereldwijde alfabetten. Vandaar dat de grootte van char in Java 2 bytes is. En het bereik is 0 tot 65535.


Antwoord 5, autoriteit 3%

ASCII heeft 128 codeposities, toegewezen aan grafische tekens en controletekens (controlecodes).

Unicode heeft 1.114.112 codeposities. Ongeveer 100.000 van hen zijn momenteel toegewezen aan tekens, en veel codepunten zijn permanent niet-tekens gemaakt (d.w.z. nooit gebruikt om enig teken te coderen), en de meeste codepunten zijn nog niet toegewezen.

De enige dingen die ASCII en Unicode gemeenschappelijkhebben, zijn: 1) Het zijn tekencodes. 2) De 128 eerste codeposities van Unicode zijn gedefinieerd om dezelfde betekenis te hebben als in ASCII, behalve dat de codeposities van ASCII-controletekens alleen zijn gedefinieerd als controletekens, met namen die overeenkomen met hun ASCII-namen, maar hun betekenis is niet gedefinieerd in Unicode.

Soms wordt Unicode gekenmerkt (zelfs in de Unicode-standaard!) Als “brede ascii”. Dit is een slogan dat voornamelijk het idee probeert over te brengen dat Unicode een universeel karaktercode is, op dezelfde manier als ASCII ooit was (hoewel het karakterrepertoire van ASCII hopeloos onvoldoende was voor universeel gebruik), als tegengesteld aan het gebruik van verschillende codes in verschillende systemen en toepassingen en voor verschillende talen.

Unicode Als zodanig definieert alleen de “logische grootte” van tekens: elk teken heeft een codenummer in een specifiek bereik. Deze codenummers kunnen worden gepresenteerd met behulp van verschillende overdrachtscodeers, en intern, in het geheugen, Unicode-tekens worden meestal weergegeven met behulp van een of twee 16-bits hoeveelheden per karakter, afhankelijk van het tekenbereik, soms met behulp van één 32-bits hoeveelheid per karakter.


Antwoord 6, Autoriteit 3%

ASCII en Unicode zijn twee tekencoderingen. Kortom, het zijn normen voor het weergeven van verschilpersonages in binary, zodat ze kunnen worden geschreven, opgeslagen, verzonden en lezen in digitale media. Het belangrijkste verschil tussen de twee is in de manier waarop ze het karakter en het aantal bits dat ze voor elk gebruiken. ASCII gebruikte oorspronkelijk zeven bits om elk teken te coderen. Dit werd later gestegen tot acht met uitgebreide ASCII om de schijnbare ontoereikendheid van het origineel aan te pakken. Unicode gebruikt daarentegen een variabel bitcoderingsprogramma waarbij u kunt kiezen tussen 32, 16 en 8-bits coderingen. Met behulp van meer bits kunt u meer tekens gebruiken ten koste van grotere bestanden, terwijl minder bits u een beperkte keuze geven, maar bespaart u veel ruimte. Met minder bits (d.w.z. utf-8 of ascii) zou waarschijnlijk het beste zijn als u codeert voor een groot document in het Engels.

Een van de belangrijkste redenen waarom Unicode het probleem was, kwam voort uit de vele niet-standaard uitgebreide ASCII-programma’s. Tenzij u de meest voorkomende pagina gebruikt, die wordt gebruikt door Microsoft en de meeste andere softwarebedrijven, zult u waarschijnlijk problemen ondervinden met het verschijnen van uw tekens als kaders. Unicode elimineert dit probleem vrijwel omdat alle tekencodepunten zijn gestandaardiseerd.

Een ander groot voordeel van Unicode is dat het maximaal een groot aantal tekens kan bevatten. Hierdoor bevat Unicode momenteel de meeste geschreven talen en is er nog ruimte voor nog meer. Dit omvat typische links-naar-rechts-scripts zoals Engels en zelfs rechts-naar-links-scripts zoals Arabisch. Chinees, Japans en de vele andere varianten zijn ook vertegenwoordigd binnen Unicode. Unicode zal dus niet snel worden vervangen.

Om de compatibiliteit met de oudere ASCII, die toen al wijdverbreid was, te behouden, werd Unicode zo ontworpen dat de eerste acht bits overeenkwamen met die van de meest populaire ASCII-pagina. Dus als u een ASCII-gecodeerd bestand opent met Unicode, krijgt u nog steeds de juiste tekens gecodeerd in het bestand. Dit vergemakkelijkte de adoptie van Unicode omdat het de impact verkleinde van het adopteren van een nieuwe coderingsstandaard voor degenen die al ASCII gebruikten.

Samenvatting:

1.ASCII uses an 8-bit encoding while Unicode uses a variable bit encoding.
2.Unicode is standardized while ASCII isn’t.
3.Unicode represents most written languages in the world while ASCII does not.
4.ASCII has its equivalent within Unicode.

Afkomstig van: http:// www.difference between.net/technology/software-technology/difference-between-unicode-and-ascii/#ixzz4zEjnxPhs


Antwoord 7

Opslag

Gegeven cijfers zijn alleen voor het opslaan van 1 teken

  • ASCII⟶ 27bits (1 byte)
  • Uitgebreide ASCII⟶ 28bits (1 byte)
  • UTF-8⟶ minimaal 28, maximaal 232bits (min 1, max 4 bytes)
  • UTF-16⟶ minimaal 216, maximaal 232bits (min 2, max 4 bytes)
  • UTF-32⟶ 232bits (4 bytes)

Gebruik (vanaf februari 2020)


Antwoord 8

ASCII definieert 128 tekens, aangezien Unicode een repertoire van meer dan 120.000 tekens bevat.


Antwoord 9

Behalve dat UTF een superset van ASCII is, is een ander goed verschil om te weten tussen ASCII en UTF de codering van schijfbestanden en gegevensrepresentatie en opslag in willekeurig geheugen. Programma’s weten dat bepaalde gegevens moeten worden opgevat als een ASCII- of UTF-tekenreeks, hetzij door speciale bytevolgordemarkeringscodes te detecteren aan het begin van de gegevens, of door vanuit de bedoeling van de programmeur aan te nemen dat de gegevens tekst zijn en deze vervolgens te controleren op patronen die aangeven dat het in een of andere tekstcodering.

Het conventionele voorvoegsel gebruiken Notatie van 0xVoor hexadecimale gegevens, Basic Good Reference is dat ASCII-tekst begint met byte-waarden 0x00naar 0x7Fvertegenwoordigen Een van de mogelijke ASCII-tekenwaarden . UTF-tekst wordt normaal gesproken aangegeven door te beginnen met de bytes 0xEF 0xBB 0xBFVOOR UTF8. Voor UTF16 start BYTES 0xFE 0xFF, of 0xFF 0xFEWORDT GEBRUIKT, met de volgorde van endian-Ness van de tekst Bytes aangegeven door de volgorde van de start bytes. De eenvoudige aanwezigheid van byte-waarden die niet in het ASCII-reeks mogelijke byte-waarden zijn, geeft ook aan dat gegevens waarschijnlijk zijn.

Er zijn andere byte order markeringen die verschillende codes gebruiken om aan te geven dat gegevens moeten worden geïnterpreteerd tekst gecodeerd in een bepaalde coderingsstandaard.

Other episodes