Beste antwoord
De andere antwoorden kloppen niet helemaal.
Unicode , het is waar, bevat een lijst met karakters uit bijna elk wereldscript. Dit is echter slechts een deel van de Unicode-standaard: de Universal Coded Character Set . De Unicode-standaard bevat ook regels voor het weergeven, ordenen, normaliseren en, ja, coderen van deze Unicode-tekens.
UTF-8 is er een van de drie standaard tekencoderingen die worden gebruikt om Unicode weer te geven als computertekst (de andere zijn UTF-16 en UTF-32). Historisch gezien werden tekstbestanden meestal gecodeerd als reeksen bytes, waarbij elke byte één teken vertegenwoordigde. Aangezien een byte echter maar één van de 256 waarden kan aannemen, is dit niet mogelijk voor Unicode. De eenvoudigste Unicode-codering is UTF-32 , die 4 bytes (of 32 bits) per teken gebruikt. Dit is echter inefficiënt in het gebruik van opslag, geheugen en verwerking. Tot 1996 werd gedacht (of gehoopt) dat 2 bytes genoeg zouden zijn om elk Unicode-teken te vertegenwoordigen, maar toen realiseerden mensen zich hoeveel Chinese karakters er zijn. Als gevolg hiervan gebruiken sommige talen, zoals JavaScript, nog steeds 2 bytes ( UCS-2 ) om tekens weer te geven, wat problemen kan veroorzaken bij het verwerken van tekens zoals \ unicode {x1F60E }. Om dit op te lossen, werd UCS-2 vervangen door UTF-16 , waarbij sommige tekens werden weergegeven door twee code-eenheden van twee bytes in plaats van één. Dit maakt stringmanipulatie complexer (bijvoorbeeld het berekenen van de lengte van een string) maar gebruikt minder ruimte dan UTF-32.
UTF-8 is vergelijkbaar met UTF-16, behalve dat de code-eenheden allemaal één byte (8 bits) lang zijn, met tekens die worden weergegeven door één tot vier code-eenheden. Tekst zonder opmaak (dwz ASCII) -tekens worden allemaal vertegenwoordigd door een enkele byte, op een manier die identiek is aan normale niet-Unicode-tekenreeksen. Dit heeft het grote voordeel dat legacy ASCII-tekst ook geldig UTF-8 is. Bovendien worden de bytes die ASCII vertegenwoordigen niet gebruikt in de weergave van andere tekens, dus oudere programmas die naar deze tekens zoeken, hoeven niet te worden bijgewerkt. Deze voordelen, gecombineerd met het feit dat UTF-8 normaal gesproken de meest ruimtebesparende manier is om Unicode-tekst op te slaan (vooral voor westerse teksten) betekent dat de overgrote meerderheid van webpaginas tegenwoordig is gecodeerd in UTF-8.
Antwoord
Het tekstverwerkingsprogramma moet iets uitvoeren (en iets opslaan in een bestand). Als u wilt dat programmas samenwerken, uw tekstverwerkingsprogramma bijvoorbeeld, praat met uw printer- en scannerstuurprogrammas, moet u beschrijven hoe ze communiceren. En dat zou u graag efficiënt willen doen. een standaard maakt die onderlinge communicatie mogelijk. Anders werken de slimme aanhalingstekens van Microsoft Word niet met uw Canon-printer en HP-scanner. Niet wat u wilt ….
Bewerken toegevoegd: Zie het antwoord van Comet over hoe unicode gerelateerd is aan semantiek (niet syntaxis /vertegenwoordiging). Dit komt op mijn punt over interoperabiliteit. U wilt dat uw tekenreeks “betekenisvol” is. Daarom worden sommige dingen in unicode weergegeven en andere niet. Gebruikers van het Latijnse alfabet, gebruikers van het Cyrillische alfabet, gebruikers van het Griekse alfabet en gebruikers van het Turkse alfabet hebben allemaal een letter die eruitziet als a (hoewel ze in sommige lettertypen te onderscheiden zijn en in andere niet), maar de schrijvers in die talen beschouwen ze als verschillende karakters (ze hebben een semantisch verschil). Unicode beschouwt ze dus als verschillende codepunten. Ze vertegenwoordigen verschillende semantiek, sorteren anders, enz. Hetzelfde geldt voor linker- en rechtercitaten en bepaalde accenttekens. In sommige talen maken ze een semantisch verschil. Je krijgt een bepaald soort interoperabiliteit als je de semantiek correct weergeeft.
Je krijgt een ander soort als je de dingen picturaal correct weergeeft. Unicode streeft echter naar het eerste, niet naar het tweede.
Als unicode homogliefen zou vertegenwoordigen als enkele karakters, zouden ze het probleem hebben welk lettertype werd gebruikt en het zou de semantische correctheid vernietigen. Een Latijnse letter a in blackscript-lettertype is heel anders dan een Helvetische letter van een Romeinse, enz. En schuin en cursief zijn niet altijd hetzelfde, maar soms wel.
Als ik borden lees in Bulgarije, zijn de meeste vaak gebruiken ze een heel ander lettertype voor hun Cyrillische karakters dan hun Latijnse transcriptie, dus het is duidelijk dat het verschillende karakters zijn, zelfs voor zaken als de letter “a”. Maar soms doen ze dat niet en als ik Bm op een kenteken zie, moet ik onderscheiden of het transcribeert naar Vt in het Engels of gewoon het Latijnse Bm is en er zijn hele woorden van die ik moet lezen om te weten welke tekenset ze zijn gebruiken.
En zelfs het verkrijgen van semantische correctheid is moeilijk. De Duitse sharp-s bestaat alleen in kleine letters en als u het woord volledig in “hoofdletters” afdrukt, gebruikt u twee S-tekens, maar er zijn woorden in kleine letters die twee “kleine letters” gebruiken en die met een scherpe- s.
Dus, zoals bijna alle standaarden, is unicode een compromis. Het probeert de juiste antwoorden te krijgen, zodat woorden correct worden weergegeven en daarmee kunnen worden verzonden. Het probeert niet “grafisch” correct te zijn, zodat een unicode-reeks de afgedrukte weergave ondubbelzinnig beschrijft met alle voorgeschreven details. Je hebt meer dan unicode nodig om dat te doen.
En als je eenmaal dat pad bewandelt, heb je het probleem met apparaten die de beschrijving die je wilt specificeren niet kunnen uitvoeren (of invoeren). Een 200 dpi-printer kan alleen zoveel en er zijn subtiliteiten die een 1200 dpi-printer kan uitdrukken die eenvoudigweg verloren gaan bij 200 dpi. De vraag wordt of het je iets kan schelen? Soms wel, maar soms ook niet.
Unicode is goed voor veel gevallen waarin je dat niet wilt en gewoon de juiste semantiek wilt. Als u een woord ondubbelzinnig wilt overbrengen en door te weten welke unicode-codepunten worden gebruikt, weet u hoe het woord in een natuurlijke taal wordt gespeld. Het bestaan van homogliefen staat toe dat iemand dubbelzinnig is, maar vereist dit niet. U kunt ondubbelzinnig zijn in unicode. U kunt gewoon niet alle details weergeven van hoe het zou kunnen worden afgedrukt.