Naar inhoud springen

Basiskennis informatica/Codering

Uit Wikibooks

Bij het onderdeel talstelsels in het boek wiskunde wordt uitleg gegeven over de algemene "werking" van een talstelsel en bij het onderdeel over de basiskennis informatica worden enkele toepassingen besproken. Deze talstelsels kunnen in een binaire wereld rechtstreeks gebruikt worden om natuurlijke getallen voor te stellen. Zo is 101(2) het natuurlijke getal 5(10). Maar hoe stel je andere gegevens binair voor? Zaken zoals kommagetallen, negatieve getallen, letters, speciale tekens, afbeeldingen,...

Daarvoor moet een codering of protocol gevonden worden, zodat een bepaalde bitreeks ook iets anders kan voorstellen dan enkel een natuurlijk getal. Deze codering moet met slechts een "alfabet" met twee tekens (een 0 en een 1) toch enorm veel computer"talen" kunnen voorstellen. Net zoals wij als mens met ons alfabet a, b, c, d,..., z ook talen kunnen coderen: Nederlands, Engels, Frans,... De letters "beer" betekenen in het Nederlands dan ook wat anders dan in het Engels.

Soort gegevens

[bewerken]

Betreffende de soort gegevens die we met één of andere codering moeten kunnen voorstellen, kunnen er vier onderscheiden worden:

  1. Gewone data:
    1. Tekst: ASCII-code, Unicode, ...
    2. Afbeeldingen: Bitmap, SVG, ...
    3. Kantoordocumenten: Office Open XML, OpenDocument, ...
    4. Webontwikkeling: HTML, CSS, ...
    5. Muziek: MP3, Ogg Vorbis, ...
    6. ...
  2. Instructies: als je bv. luistert naar muziek, dan is de muziek zelf gewone data, maar om die te beluisteren heb je een programma nodig. Dit programma bestaat uit instructies die op één of andere manier gecodeerd zijn met nulletjes en eentjes, zodat de processor ze begrijpt en ook kan uitvoeren. Om een programma te maken gebruik je een programmeertaal zoals Java, C, C# of PHP.
  3. Adres: als data wordt opgeslagen, is het de bedoeling om ze ook terug te kunnen vinden. Hiervoor worden adressen gebruikt. Dit is de meest simpele codering, daar je hiervoor een talstelsel kan gebruiken. Gebruik je bv. 16 bit om een adres voor te stellen (zoals bij het bestandssysteem FAT16 het geval is), dan heb je 216 = 65536 mogelijke adressen. Dit is binair 0000000000000000, 0000000000000001, 0000000000000010,..., 1111111111111111 of decimaal 0, 1, 2,.... , 65535.
  4. Controlesignalen. Dit is een vorm van codering die zaken controleert, bv. een lees- of schrijfsignaal.

Voorbeelden gewone data

[bewerken]

Het is onmogelijk om met dit boek álle computertalen te bespreken. In dit onderdeel wordt met enkele eenvoudige coderingen duidelijk gemaakt wat de bedoeling is van coderen.

ASCII

[bewerken]

ASCII-code is een afkorting van American Standard Code for Information Interchange en is een standaard ontwikkeld vanaf 1960 om een aantal letters, cijfers, leestekens en andere symbolen te representeren. De standaard ASCII-tabel is een 7-bits code, waarmee dus 27 = 128 ASCII-codes mogelijk zijn. In eerste instantie denkt men aan 10 cijfers, 26 kleine letters en 26 hoofdletters, maar het wordt ook gebruikt voor speciale tekens (|,@,...), de spatiebalk en besturingscodes (acknowledgement, geluidssignaal,...). Sommige van deze codes herinneren nog aan het feit dat de uitvoer vroeger meestal niet op een beeldscherm werd getoond, maar met een teletype, een soort door een computer aangestuurde typemachine, op papier werd afgedrukt.

In het voorbeeld hieronder werd de binaire notatie gebruikt om de tekst in 7 bit ASCII voor te stellen. Het volledig woordenboek van de ASCII-tabel is wijdverspreid op het internet, o.a. op de ASCII-Wikipediapagina.

computertaal mensentaal
11001011101110010000011101001100001110000111011000100000
11011011100101111010001000000110000010000011001011101110
0100000011000101000000111010010110101010010100001
ASCII, een taal met 0 en 1 :-)!

Unicode

[bewerken]

In landen buiten de Verenigde Staten was er behoefte aan extra tekens, zoals andere letters, letters met accenten, valutasymbolen en figuurtjes. Denk bv. aan de Duitse taal met äöü en ÄÖÜ of aan het Britse pondteken £. Zomaar de ascii-codes van "overbodige" tekens zoals [\], {|} of # respectievelijk interpreteren als äöü, ÄÖÜ of £ zou uiteraard voor communicatieproblemen zorgen!

Er was dus een vervanger/opvolger nodig: Unicode, een internationale standaard voor de binaire codering van tekens en symbolen ("karakters") van alle geschreven talen. Naast letters en cijfers bevat Unicode ook veel symbolen, zoals: kruisen, wiskundige tekens, muntsymbolen enzovoort. Het bevat geen symbolen die niet in een schrift worden gebruikt, zoals verkeersborden. De standaard wordt onderhouden door het Unicode Consortium. De standaard bevat momenteel ruim 100.000 gestandaardiseerde tekens en ongeveer 900.000 voor toekomstig gebruik gereserveerde codes.

Om dit concreet te kunnen coderen op een pc biedt Unicode een aantal mogelijke coderingen:

  • UTF-32: voor de codering worden 32 bits gebruikt (dit zijn dus 232 = ± 4 miljard mogelijkheden). Een nadeel is dat ASCII-bestanden in Unicode daardoor 4 keer zo groot worden.
  • UTF-16: tekens worden opgeslagen als een of twee 16-bits getallen, afhankelijk van de hun toegekende waarde.
  • UTF-8: tekens worden opgeslagen als een tot vier 8-bits getallen, afhankelijk van de hun toegekende waarde. In deze codering blijven ASCII-teksten onveranderd.

Hieronder een UTF-32 voorbeeld. Ter info:

  • De BOM FF FE 00 00 aan het begin wijst op de UTF-32 met Little-endian.
  • De UTF-32 voor de letter U is 55 00 00 00 en "toevallig" is ook de UTF-8 of ASCII-code voor 55 de letter U.
  • De UTF-32 voor 🩷 is 77 FA 01 00, waarvoor uiteraard geen ASCII-symbool bestaat (<3 komt het beste in de buurt).
computertaal mensentaal
FF FE 00 00 FF FE 00 00 55 00 00 00 6E 00 00 00
69 00 00 00 63 00 00 00 6F 00 00 00 64 00 00 00
65 00 00 00 20 00 00 00 77 FA 01 00 21 00 00 00
00 00 00 00
Unicode 🩷!

Tweakers stapt over op UTF-8

Tweakers zet hun standaardtekencodering van latin-9 (ISO-8859-15) om naar UTF-8. Dat lijkt eenvoudig, maar ze wilden geen downtime, de code waar inhoud werd ge-output naar een tekencodering moest worden aangepast, alsook de wachtwoordenopslag (met een tussenstap voor gehashte wachtwoorden). De door hun gebruikte latin-9 had bovendien geen expliciete ondersteuning in de databank MySQL, wat de zaken ook bemoeilijkte. De eindgebruiker merkt hier niet veel van, tenzij bij het aanpassen van reacties/posts: bij latin-9 had je een html-entiteit zoals & # 127866 ; nodig, maar nu kan dat met 🍺 rechtstreeks in UTF-8.

(nl) Tweakers stapt over op utf-8. tweakers.net (2019-01-14).

Bitmap

[bewerken]

BMP (een afkorting van bitmap) is een bestandsindeling voor rasterafbeeldingen. BMP-bestanden zijn meestal niet gecomprimeerd, zodat ze vaak veel groter zijn dan gecomprimeerde grafische bestanden die een plaatje van dezelfde afmeting bevatten. Hierdoor zijn afbeeldingen in BMP-indeling meestal ongeschikt om te worden verstuurd via het internet of andere relatief trage netwerken. Voor dit onderdeel "codering" is deze bestandsindeling interessant om de wisselwerking te zien tussen die binaire codering en het eindresultaat, bv. door wijzigingen aan te brengen via een hex editor.

computertaal mensentaal
42 4d 3e 00 00 00 00 00 00 00 36 00 00 00 28 00 00 00 02
00 00 00 01 00 00 00 01 00 18 00 00 00 00 00 08 00 00 00
13 0b 00 00 13 0b 00 00 00 00 00 00 00 00 00 00 02 01 ff
22 cc ff 00 00
Een afbeelding met twee pixels: links een rode pixel en rechts een oranje pixel. Merk op:
  • Als je op de eerste twee bytes (nl. 42 en 4d) de ASCII-codering toepast, dan bekom je de letters 'BM'.
  • Het rode kleur 'ff0102' is letterlijk zichtbaar als '02 01 ff' en het oranje kleur 'ffcc22' is zichtbaar als '22 cc ff'.
  • Met een hex-editor kan je rechtstreeks de kleuren aanpassen, waardoor je een duidelijk zicht krijgt op de BMP-codering.

Foute codering

[bewerken]
De Japanse hoofdpagina van Wikipedia die als UTF-8 geëncodeerd is, maar wordt weergegeven met de Windows-1252 ("ISO-8859-1") codering

Tussen de 7-bits ASCII en Unicode ontstonden de extended ASCII-tekenverzamelingen met 8 bits als bitruimte. Dat betekende dubbel zoveel mogelijkheden: 28 = 256. Let echter op het meervoud: extended ASCII is niet één bepaalde standaard, maar een verzamelnaam voor de verschillende tekenrepresentaties die de 95 afdrukbare ASCII-tekens als basis hebben. Je voelt dus aan dat als een editor de verkeerde karaktertabel gebruikt, de eigenlijke inhoud niet correct wordt weergegeven (zie onderstaande tabel).

Extended ASCII
Bit-code Hex-code ISO-8859-1 Windows-1251
1010 0011 A3 pondteken £ cyrillische Ј
1010 1001 A9 copyrightteken © copyrightteken ©
1101 1111 DF de Duitse Eszett ß cyrillische Я

Vandaar dat Unicode als één codering to rule them all de betere keuze is. Maar ook bij Unicode kunnen nog steeds fouten ontstaan. Als je bv. in de programmeertaal Python de functie pandas.read_csv() gebruikt, dan verwacht deze standaard UTF-8. Sommige apparaten of software zullen echter UTF-16 als encoding voor de csv-bestanden gebruiken. Denk bv. aan Excel die ze als UTF-16 of ISO-8859-1 kan bewaren.

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

Combinatie

[bewerken]

Uiteraard worden coderingen/protocollen gecombineerd:

  • Een webpagina is op tekstueel niveau met een bepaalde tekencodering (bv. UTF-8 of UTF-32): niet alleen voor de inhoud zelf, maar ook voor de html-tags zoals de b-, p- of style-tag.
  • Je wil bv. enkele bestanden (met bv. als codering 'pdf', 'docx', 'txt',...) doormailen (via bv. het protocol SMTP) naar iemand anders. Je wil dat de bijlage zo klein als mogelijk is, dus comprimeer je alles (bv. als codering zip, rar of 7z). De andere persoon leest zijn mail (bv. via het IMAP-protocol), decomprimeert de bijlage en bekijkt elk van de bestanden met een programma dat de codering begrijpt (bv. pdf-lezer, MS Office, Kladblok,...).

Open versus gesloten

[bewerken]

Er zijn verschillende coderingen, elk met hun eigen toepassingsgebied. Maar ook binnen één toepassingsgebied kan je vaak kiezen uit meerdere coderingen. Binnen de grafische formaten heb je zo 'jpg', 'png', 'bmp', 'gif' en nog vele meer. Eén van de aspecten bij coderingen is het verschil tussen 'gesloten' en 'open' codering:

  • Bij een open codering/specificatie is het woordenboek om de binaire/tekstuele informatie te coderen in een voor de (IT-)mens verstaanbare uitleg vrij beschikbaar. Dit laat toe aan om het even welke programmeur om een eigen programma te schrijven, dat compatibel is met de gekozen codering. Zo zijn HTML, CSS en SVG open coderingen, zodat iedereen met de nodige kennis zijn eigen browser schrijven. Omdat ASCII en Unicode open standaarden zijn, kan iedereen zijn eigen teksteditor schrijven.
  • Bij een gesloten codering/specificatie maakt iemand (persoon, bedrijf, ...) een codering, waarvan deze het woordenboek om te weten hoe die codering in elkaar zit niet vrijgeeft. Bijkomend ontwikkelt deze de software die met deze codering overweg kan en dus de vertaalslag doet naar de eindgebruiker. Anderen kunnen geen concurrerende software maken, omdat het woordenboek niet is vrijgegeven. Zo creëer je dus een afhankelijkheid t.o.v. dat ene bedrijf, wat bekend staat als vendor lock-in.

Je merkt dat een weloverwogen keuze belangrijk is en dat je de gevolgen van de gekozen codering kan inschatten! Bij een gesloten codering zijn er sommigen die deze codering reverse engineeren en proberen te achterhalen hoe die codering in elkaar zit. Hierdoor zal je bij sommige gesloten coderingen tóch alternatieve software vinden.

Een belangrijk misverstand bij een open codering/specificatie is dat je dit vrij zou mogen aanpassen. Het gaat hier echter niet om openbronsoftware (open source software, OSS), maar over een codering/taal! Het aanpassen van een taal zou betekenen dat je vanaf nu bv. wit door blauw vervangt en zwart door rood. Als je tegen je medemens zou zeggen dat hier rode tekst op een blauwe achtergrond staat, zal er een communicatieprobleem ontstaan. Of dat je de b-tag van HTML maar niets vindt en dat je liever een bold-tag zou hebben, maar geen enkele browser zal jouw tag begrijpen! Verwar een open codering/specificatie dus niet met open source software!

Enkele voorbeelden van coderingen versus software
Categorie Open codering Gesloten codering Software
Tekst ASCII, Unicode Kladblok, Notepad++ (OSS), …
Kantoor Docx, xlsx, pptx, .. Microsoft Office, LibreOffice (OSS)
Kantoor OpenDocument Microsoft Office, LibreOffice (OSS)
Kantoor Office Open XML Microsoft Office, LibreOffice (OSS)
Web HTML, CSS, SVG Chrome, Firefox (OSS), Edge
Chat WhatsApp-protocol WhatsApp
Chat Matrix[1] Element (OSS), Spectral (OSS), Quaternion (OSS), …
Microblogging X protocol X (voorheen Twitter)
Microblogging ActivityPub Mastodon

Een bedrijf/persoon kan dus zelf een codering ontwerpen en die (het "woordenboek") vrij ter beschikking stellen aan iedereen. Om wildgroei te vermijden wordt voor veel formaten gewerkt met een standaardenorganisatie, die alles in goede banen leidt. Als zo'n codering de volledige procedure heeft doorlopen, spreekt men niet zomaar van een open codering/specificatie, maar van een open standaard. Zo wordt HTML en SVG ontwikkeld door de standaardenorganisatie W3C.

In het Wikibook van open standaarden, kan je terecht voor meer informatie. Bovenstaande items worden hierbij diepgaander uitgewerkt.

Hoofdaanklager van ICC heeft geen toegang meer tot Microsoft-mail na sancties VS

Breder dan open versus gesloten standaarden is de digitale soevereiniteit: namelijk hoe goed is Europa in staat om digitaal volledig op zijn eigen benen te staan (zeker in het geval van crisis). Dan blijkt dat we niet alleen militair afhankelijk zijn van Amerika, maar ook van heel wat Amerikaanse internetgiganten (big tech) in een Amerikaanse cloud.

Zo bleek dat de hoofdaanklager van het Internationaal Strafhof ICC geen toegang meer had tot zijn Microsoft-mail, na sancties vanuit de Verenigde Staten. Nochtans woont deze persoon in Nederland en heeft Microsoft ook cloudservers in Europa. Dan blijkt een soevereine cloud toch niet per definitie soeverein te zijn.[2] Vandaar websites zoals european-alternatives.eu.

(nl) Hoofdaanklager van ICC heeft geen toegang meer tot Microsoft-mail na sancties VS. Tweakers.net (2025-05-16).
  1. Voor wat achtergrond, zie Tweakers.net: Matrix: decentraal chatprotocol, onverwacht populair bij bedrijven.
  2. Berthub.eu articles > Is dit een soevereine cloud?
Informatie afkomstig van Wikibooks NL,
een onderdeel van de Wikimedia Foundation.