Vraag Wat is het verschil tussen ASCII en Unicode?


Kan ik het exacte verschil tussen Unicode en ASCII weten?

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

Bestaat er een formaatspecificatie voor Unicode-tekens?


275
2017-10-06 18:25


oorsprong


antwoorden:


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

Unicode is een superset van ASCII en de getallen 0-128 hebben dezelfde betekenis in ASCII als in Unicode. Bijvoorbeeld, het getal 65 betekent "Latijns kapitaal" A "".

Omdat Unicode-tekens meestal niet in één 8-bits byte passen, zijn er verschillende manieren om Unicode-tekens in bytesequenties op te slaan, zoals UTF-32 en UTF-8.


363
2017-10-06 18:29



Begrip waarom ASCII en Unicode zijn op de eerste plaats gemaakt en hebben me geholpen te begrijpen hoe ze werken echt.

ASCII, Origins

Zoals in de andere antwoorden wordt vermeld, gebruikt ASCII 7 bits om een ​​teken weer te geven. Door 7 bits te gebruiken, kunnen we maximaal 2 ^ 7 (= 128) verschillende combinaties hebben*. Dat 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 vermijden pariteitsbit.   Dit was jaren geleden relevant.

De meeste ASCII-tekens zijn afdrukbare tekens van het alfabet, zoals abc, ABC, 123,? & !, enzovoort. De andere zijn controle karakters zoals carriage return, line feed, tabblad, 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 het Engels.

Wat? Waarom alleen Engels? Zoveel talen die er zijn!

Omdat het centrum van de computerindustrie zich daar in de VS bevond   tijd. Als gevolg hiervan hoefden ze geen accenten of andere te ondersteunen   merken zoals á, ü, ç, ñ, enz. (aka diacritics).

ASCII uitgebreid

Sommige slimme mensen begonnen het 8ste bit (het bit gebruikt voor pariteit) te gebruiken om meer karakters te coderen om hun taal te ondersteunen (ter ondersteuning van "é", bijvoorbeeld in het Frans). Alleen al het gebruik van een extra bit verdubbelde de grootte van de originele ASCII-tabel om maximaal 256 tekens in kaart te brengen (2 ^ 8 = 256 tekens). En niet 2 ^ 7 zoals eerder (128).

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

De naam "ASCII uitgebreid tot 8 bits en niet 7 bits zoals eerder" zou zojuist kunnen worden aangeduid als "extended ASCII" of "8-bit ASCII".

Als @Tom In zijn opmerking hieronder is er niet zoiets als "uitgebreide ASCII"Toch is dit een gemakkelijke manier om naar deze 8e-bit trick te verwijzen. Er zijn veel variaties op de 8-bit ASCII-tabel, bijvoorbeeld de ISO 8859-1, ook ISO Latin-1 genoemd.

Unicode, The Rise

ASCII Extended lost het probleem op voor talen die zijn gebaseerd op het Latijnse alfabet ... hoe zit het met de anderen die een compleet ander alfabet nodig hebben? Grieks? Russisch? Chinees en dergelijke?

We hadden een geheel nieuwe tekenset nodig ... dat is het rationele achter Unicode. Unicode bevat niet elk personage 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. Je moet deze abstracte voorstelling "coderen". Dat is waar een codering komt in het spel.

Coderingen: UTF-8 versus UTF-16 versus UTF-32

Dit antwoord doet behoorlijk goed werk bij het uitleggen van de basis:

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

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

mnemonics:

  • UTF8: minimum 8 bits.
  • UTF16: minimum 16 bits.
  • UTF32: minimum en maximum 32 bits.

Notitie:

Waarom 2 ^ 7?

Dit is voor sommigen duidelijk, maar voor het geval dat. We hebben zeven beschikbare slots gevuld met 0 of 1 (Binaire code).   Elk kan twee combinaties hebben. Als we zeven vlekken 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 nummers heeft.

Bron: Wikipedia en deze geweldige blogpost.


186
2017-12-17 12:18



ASCII heeft 128 codepunten, 0 tot en met 127. Het past in een enkele 8-bit byte, de waarden 128 t / m 255 hadden de neiging om voor andere karakters te worden gebruikt. Met incompatibele keuzes, waardoor de codepagina ramp. Tekst gecodeerd in één codepagina kan niet correct worden gelezen door een programma dat op een andere codepagina veronderstelt of geraden wordt.

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

Codering in 16-bits was gebruikelijk toen v2 werd gebruikt, bijvoorbeeld door Microsoft en Apple-besturingssystemen. En taalruntimes zoals Java. De v2-specificatie kwam met 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 een codepunt zowel 2 als 4 bytes kan innemen. De oorspronkelijke v1-codepunten nemen 2 bytes in beslag, de toegevoegde 1 nemen 4.

Een andere codering met variabele lengte die heel gebruikelijk is, gebruikt in * nix besturingssystemen en hulpmiddelen is UTF-8, een codepunt kan tussen 1 en 4 bytes duren, de originele ASCII-codes nemen 1 byte, de rest neemt meer. De enige niet-variabele lengtecodering is UTF-32, neemt 4 bytes voor een codepunt. Niet vaak gebruikt omdat het behoorlijk verspillend 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 zal afhangen van de endian-ness van de machine die de tekststream heeft gemaakt. Voeg dus toe aan de mix UTF-16BE, UTF-16LE, UTF-32BE en UTF-32LE.

Het hebben van deze verschillende coderingskeuzes brengt de code pagina ramp tot op zekere hoogte terug, samen met verhitte discussies onder programmeurs welke UTF keuze het "beste" is. Hun associatie met de standaardwaarden van het besturingssysteem trekt vrijwel de lijnen. Een tegenmaatregel is de definitie van een stuklijst, het bytevolgordeteken, een speciaal codepunt (U + FEFF, nulbreedte-spatie) aan het begin van een tekststroom die aangeeft hoe de rest van de stream is gecodeerd. Het geeft zowel de UTF-codering als de endianess aan en is neutraal voor een tekstverwerkingsengine. Helaas is het optioneel en veel programmeurs claimen hun recht om het weg te laten, zodat ongelukken nog steeds vrij algemeen zijn.


82
2017-10-06 19:12



ASCII heeft 128 codeposities, toegewezen aan grafische karakters en besturingstekens (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. niet gebruikt om een ​​willekeurig teken ooit te coderen), en de meeste codepunten zijn nog niet toegewezen.

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

Soms wordt Unicode echter gekenmerkt (zelfs in de Unicode-standaard!) Als "brede ASCII". Dit is een slogan die vooral probeert het idee over te brengen dat Unicode bedoeld is als een universeel karaktercode op dezelfde manier als ASCII ooit was (hoewel het karakterrepertoire van ASCII hopeloos ontoereikend was voor universeel gebruik), als tegengesteld aan het gebruik van verschillende codes in verschillende systemen en applicaties 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 overdrachtscoderingen en intern, in het geheugen, worden Unicode-tekens gewoonlijk weergegeven met een of twee 16-bits hoeveelheden per teken, afhankelijk van het tekenbereik, waarbij soms een 32-bits hoeveelheid per teken wordt gebruikt.


10
2017-10-06 18:51



ASCII en Unicode zijn coderingen van twee tekens. Kort gezegd, het zijn standaarden voor het weergeven van verschil-tekens in binaire bestanden zodat ze kunnen worden geschreven, opgeslagen, verzonden en gelezen in digitale media. Het belangrijkste verschil tussen beide is de manier waarop ze het teken en het aantal bits coderen dat ze voor elk gebruiken. ASCII gebruikte oorspronkelijk zeven bits om elk teken te coderen. Dit werd later uitgebreid tot acht met Extended ASCII om de schijnbare ontoereikendheid van het origineel aan te pakken. Unicode daarentegen gebruikt een coderingsprogramma met variabele bits waarin u kunt kiezen tussen 32, 16 en 8-bits coderingen. Als u meer bits gebruikt, kunt u meer tekens gebruiken ten koste van grotere bestanden, terwijl minder bits u een beperkte keuze geven, maar u bespaart veel ruimte. Het gebruik van minder bits (bijv. UTF-8 of ASCII) zou waarschijnlijk het beste zijn als u een groot document in het Engels codeert.

Een van de belangrijkste redenen waarom Unicode het probleem was, kwam voort uit de vele niet-standaard uitgebreide ASCII-programma's. Tenzij u de heersende pagina gebruikt, die wordt gebruikt door Microsoft en de meeste andere softwarebedrijven, zult u waarschijnlijk problemen ondervinden met het verschijnen van uw karakters als vakjes. Unicode elimineert dit probleem praktisch omdat alle karaktercodepunten gestandaardiseerd waren.

Een ander groot voordeel van Unicode is dat het op zijn maximum een ​​enorm aantal karakters kan herbergen. Daarom bevat Unicode momenteel de meeste geschreven talen en heeft het nog steeds ruimte voor nog meer. Dit omvat typische links-rechts-scripts, zoals Engels en zelfs rechts-naar-links-scripts, zoals het Arabisch. Chinees, Japans en de vele andere varianten zijn ook vertegenwoordigd in Unicode. Unicode zal dus niet snel worden vervangen.

Om compatibiliteit met de oudere ASCII te behouden, die toen al op grote schaal werd gebruikt, werd Unicode zo ontworpen dat de eerste acht bits overeenkwamen met die van de populairste 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 van het invoeren van een nieuwe coderingsstandaard voor degenen die al ASCII gebruikten, verminderde.

Overzicht:

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.

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


6
2017-11-23 07:14



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

enter image description here


6
2017-11-04 06:32



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


1
2017-08-16 03:33