Kan du berätta för mig med några ord skillnaden mellan Unicode och UTF-8?

Bästa svaret

De andra svaren är inte helt rätt.

Unicode , det är sant, innehåller en lista med tecken från nästan alla världsmanus. Detta är dock bara en del av Unicode Standard: Universal Coded Character Set . Unicode Standard innehåller också regler för rendering, ordning, normalisering och, ja, kodning av dessa Unicode-tecken.

UTF-8 är en av de tre standardteckenkodningarna som används för att representera Unicode som datortext (de andra är UTF-16 och UTF-32). Historiskt kodades textfiler vanligtvis som sekvenser av byte där varje byte representerade ett tecken. Eftersom en byte bara kan ta ett av 256 värden är det dock inte möjligt för Unicode. Den enklaste Unicode-kodningen är UTF-32 , som använder 4 byte (eller 32 bitar) per tecken. Detta är dock ineffektivt när det gäller lagring, minne och bearbetning. Fram till 1996 trodde man (eller hoppades) att två byte skulle räcka för att representera varje Unicode-karaktär, men då insåg folk hur många kinesiska tecken det finns. Som ett resultat använder vissa språk som JavaScript fortfarande två byte ( UCS-2 ) för att representera tecken, vilket kan orsaka problem vid hantering av tecken som \ unicode {x1F60E }. För att åtgärda detta ersattes UCS-2 med UTF-16 , där vissa tecken representerades av två två-byte kodenheter snarare än en. Detta gör strängmanipulering mer komplex (till exempel att beräkna längden på en sträng) men använder mindre utrymme än UTF-32.

UTF-8 liknar UTF-16, förutom att dess kodenheter alla är en byte (8 bitar) långa, med tecken representerade av mellan en och fyra kodenheter. Vanlig text (dvs. ASCII) -tecken representeras alla av en enda byte, på ett sätt som är identiskt med normala icke-Unicode-strängar. Detta har den stora fördelen att äldre ASCII-text också är giltig UTF-8. Vidare används inte byten som representerar ASCII för att representera andra tecken, så äldre program som söker efter dem behöver inte uppdateras. Dessa fördelar kombinerat med det faktum att UTF-8 normalt är det mest rymdeffektiva sättet att lagra Unicode-text (speciellt för västerländska texter) innebär att de allra flesta webbsidor idag är kodade i UTF-8.

Svar

Textbehandlingsprogrammet måste mata ut något (och spara något i en fil.) Om du vill att program ska fungera tillsammans, ska ditt textbehandlingsprogram prata med din skrivare och skannerdrivrutiner, till exempel, måste du beskriva hur de kommunicerar. Och du vill göra det effektivt. en standard möjliggör interkommunikation. Annars fungerar dina Microsoft Word-smarta citat inte med din Canon-skrivare och HP-skanner. Inte vad du vill …

Redigera tillagd: Se Comets svar om hur unicode är relaterat till semantik (inte syntax /representation). Detta går till min poäng om interoperabilitet. Du vill att din karaktärssekvens ska vara ”meningsfull”. Det är därför som vissa saker representeras i unicode och andra inte. Användare av latinska alfabetet, användare av kyrilliska alfabet, användare av grekiska alfabet och användare av turkiska alfabet har alla en bokstav som ser ut som “a” (även om de i vissa teckensnitt kan särskiljas och i andra inte) men författarna på dessa språk anser dem olika karaktärer (de har en semantisk skillnad). Således anser unicode dem som olika kodpunkter. De representerar olika semantik, sorterar annorlunda etc. Detsamma gäller vänster och höger citat och vissa accenttecken. På vissa språk gör de en semantisk skillnad. Du får en viss typ av interoperabilitet när du representerar semantik korrekt.

Du får en annan typ när du representerar saker bildligt korrekt. Unicode strävar emellertid efter den första, inte den andra.

Om unicode representerade homoglyfer som enstaka tecken skulle de ha problemet med vilket typsnitt som användes och det skulle förstöra semantisk korrekthet. En latinsk bokstav a i svart teckensnitt är väldigt annorlunda än en helvetisk bokstav från en romersk osv. Och sned och kursiv stil är inte alltid samma, men ibland är det.

När jag läser tecken i Bulgarien är de flesta ibland använder de ett helt annat teckensnitt för sina kyrilliska tecken än deras latinska transkription, så det är uppenbart att de är olika tecken, även för saker som bokstaven ”a”. Men ibland gör de det inte och när jag ser Bm på en registreringsskylt måste jag skilja om det transkriberas till Vt på engelska eller helt enkelt är det latinska Bm och det finns hela ord som jag måste läsa för att veta vilken teckenuppsättning de använder.

Och det är svårt att få semantisk korrekthet. De tyska skarphållarna finns bara med gemener och om du skriver ut ordet i stora bokstäver använder du två S-tecken, men det finns ord med gemener som använder två små bokstäver och sådana som använder skarpa s.

Så som nästan alla standarder är unicode en kompromiss. Den försöker få svaren rätt så att ord representeras korrekt och kan överföras med hjälp av den. Det försöker inte vara ”grafiskt” korrekt, så att en unicode-sekvens beskriver dess tryckta representation entydigt med alla föreskrivna detaljer. Du behöver mer än unicode för att göra det.

Och när du väl har gått den vägen har du problemet med enheter som inte kan mata ut (eller mata in) den beskrivning du vill ange. En 200 dpi-skrivare kan bara göra så mycket och det finns finesser som en 1200 dpi-skrivare kan uttrycka som helt enkelt går förlorade vid 200 dpi. Frågan blir om du bryr dig? Ibland gör du det, men andra gånger inte.

Unicode är bra i många fall där du inte vill och helt enkelt vill ha rätt semantik. När du vill överföra ett ord entydigt och genom att veta vilka unicode-kodpunkter som används vet du hur ordet stavas på ett naturligt språk. Förekomsten av homoglyfer gör att man kan vara tvetydig, men kräver det inte. Du kan vara entydig i unicode. Du kan bara inte representera alla detaljer om hur det kan skrivas ut .

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *