Hoe UTF-8 in JavaScript te coderen/decoderen

Hoe Utf 8 In Javascript Te Coderen Decoderen



UTF-8 staat voor “ Unicode-transformatieformaat 8-bits ” en komt overeen met een geweldig coderingsformaat dat ervoor zorgt dat de tekens op alle apparaten correct worden weergegeven, ongeacht de gebruikte taal/script. Dit formaat is ook nuttig voor webpagina's en wordt gebruikt voor de opslag, verwerking en overdracht van tekstgegevens op internet.

Deze tutorial behandelt de onderstaande inhoudsgebieden:







Wat is UTF-8-codering?

UTF-8-codering ” is de procedure voor het transformeren van de reeks Unicode-tekens naar een gecodeerde reeks van 8-bits bytes. Deze codering kan een groot aantal tekens vertegenwoordigen in vergelijking met de andere tekencoderingen.



Hoe werkt UTF-8-codering?

Hoewel het in UTF-8 karakters vertegenwoordigt, wordt elk individueel codepunt weergegeven door een of meer bytes. Hieronder volgt een overzicht van de codepunten in het ASCII-bereik:



  • Eén byte vertegenwoordigt de codepunten in het ASCII-bereik (0-127).
  • Twee bytes vertegenwoordigen de codepunten in het ASCII-bereik (128-2047).
  • Drie bytes vertegenwoordigen de codepunten in het ASCII-bereik (2048-65535).
  • Vier bytes vertegenwoordigen de codepunten in het ASCII-bereik (65536-1114111).

Het is zo dat de eerste byte van een “ UTF-8 ’-reeks wordt de ‘ leidersbyte ', wat informatie geeft over het aantal bytes in de reeks en de codepuntwaarde van het personage.
De “leiderbyte” voor een reeks van enkele, twee, drie en vier bytes ligt respectievelijk in het bereik (0-127), (194-233), (224-239) en (240-247).





De rest van de bytes in volgorde worden de “ achterlopend bytes. De bytes voor een reeks van twee, drie en vier bytes liggen allemaal in het bereik (128-191). Het is zo dat de codepuntwaarde van het personage kan worden berekend door de leidende en volgende bytes te analyseren.

Hoe worden de codepuntwaarden berekend?

De codepuntwaarden voor verschillende bytereeksen worden als volgt berekend:



  • Sequentie van twee bytes: Het codepunt is gelijk aan “((lb – 194) * 64) + (tb – 128)”.
  • Reeks van drie bytes : Het codepunt is gelijk aan “((lb – 224) * 4096) + ((tb1 – 128) * 64) + (tb2 – 128)”.
  • Reeks van vier bytes : Het codepunt is gelijk aan “((lb – 240) * 262144) + ((tb1 – 128) * 4096) + ((tb2 – 128) * 64) + (tb3 – 128)”.

Hoe UTF-8 in JavaScript coderen/decoderen?

Het coderen en decoderen van UTF-8 in JavaScript kan via de onderstaande benaderingen worden uitgevoerd:

  • enodeURIComponent() ' En ' decodeURIComponent() Methoden.
  • codeURI() ' En ' decodeURI() Methoden.
  • Normale uitdrukkingen.

Benadering 1: Codeer/decodeer UTF-8 in JavaScript met behulp van de methoden “encodeURIComponent()” en “decodeURIComponent()”

De ' codeerURIComponent() ”-methode codeert een URI-component. Het kan ook speciale tekens coderen, zoals @, &, :, +, $, #, enz. De “ decodeURIComponent() ”-methode decodeert echter een URI-component. Deze methoden kunnen worden gebruikt om respectievelijk de doorgegeven waarden naar UTF-8 te coderen en decoderen.

Syntaxis(“encodeURIComponent()” Methode)

encodeURIComponent ( X )

In de gegeven syntaxis: “ X ” geeft de URI aan die moet worden gecodeerd.

Winstwaarde
Deze methode heeft een gecodeerde URI als tekenreeks opgehaald.

Syntaxis(“decodeURIComponent()” Methode)

decodeURIComponent ( X )

Hier, ' X ” verwijst naar de URI die moet worden gedecodeerd.

Winstwaarde
Deze methode geeft de gedecodeerde URI.

Voorbeeld 1: UTF-8 coderen in JavaScript
Dit voorbeeld codeert de doorgegeven tekenreeks naar een gecodeerde UTF-8-waarde met behulp van een door de gebruiker gedefinieerde functie:

functie codeer_utf8 ( X ) {
opbrengst ontsnap ( encodeURIComponent ( X ) ) ;
}
laat val = 'hier' ;
troosten. loggen ( 'Gegeven waarde -> ' + val ) ;
laat codeVal = codeer_utf8 ( val ) ;
troosten. loggen ( 'Gecodeerde waarde -> ' + codeerVal ) ;

Voer in deze coderegels de onderstaande stappen uit:

  • Definieer eerst de functie “ codeer_utf8() ' die de doorgegeven tekenreeks codeert die wordt vertegenwoordigd door de opgegeven parameter.
  • Deze codering wordt gedaan door de “ codeerURIComponent() ”-methode in de functiedefinitie.
  • Opmerking: De ' ontsnap() ”-methode vervangt elke escape-reeks door het teken dat erdoor wordt weergegeven.
  • Initialiseer daarna de te coderen waarde en geef deze weer.
  • Roep nu de gedefinieerde functie aan en geef de gedefinieerde combinatie van tekens door als argumenten om deze waarde naar UTF-8 te coderen.

Uitvoer

Hier kan worden gesuggereerd dat de individuele karakters dienovereenkomstig worden weergegeven en gecodeerd in UTF-8.

Voorbeeld 2: UTF-8 decoderen in JavaScript
De onderstaande codedemonstratie decodeert de doorgegeven waarde (in de vorm van tekens) naar een gecodeerde UTF-8-weergave:

functie decode_utf8 ( X ) {
opbrengst decodeURIComponent ( ontsnappen ( X ) ) ;
}
laat val = 'à çè' ;
troosten. loggen ( 'Gegeven waarde -> ' + val ) ;
laten decoderen = decode_utf8 ( val ) ;
troosten. loggen ( 'Gedecodeerde waarde -> ' + decoderen ) ;

In dit codeblok:

  • Definieer op dezelfde manier de functie “ decode_utf8() ' dat de doorgegeven combinatie van tekens decodeert via de ' decodeURIComponent() methode.
  • Opmerking: De ' ontsnappen() De methode haalt een nieuwe tekenreeks op waarin verschillende tekens worden vervangen door hexadecimale ontsnappingsreeksen.
  • Specificeer daarna de combinatie van tekens die moeten worden gedecodeerd en open de gedefinieerde functie om de decodering naar UTF-8 op de juiste manier uit te voeren.

Uitvoer

Hier kan worden geïmpliceerd dat de gecodeerde waarde in het vorige voorbeeld wordt gedecodeerd naar de standaardwaarde.

Benadering 2: Codeer/decodeer UTF-8 in JavaScript met behulp van de methoden “encodeURI()” en “decodeURI()”

De ' codeURI() De methode codeert een URI door elke instantie van meerdere tekens te vervangen door een aantal escape-reeksen die de UTF-8-codering van het personage vertegenwoordigen. Vergeleken met de “ codeerURIComponent() ”-methode, deze specifieke methode codeert een beperkt aantal tekens.

De ' decodeURI() ”-methode decodeert echter de URI (gecodeerd). Deze methoden kunnen in combinatie worden geïmplementeerd om de combinatie van tekens in een UTF-8-gecodeerde waarde te coderen en decoderen.

Syntaxis(encodeURI() Methode)

codeURI ( X )

In de bovenstaande syntaxis: “ X ” komt overeen met de waarde die moet worden gecodeerd als een URI.

Winstwaarde
Deze methode haalt de gecodeerde waarde op in de vorm van een string.

Syntaxis(decodeURI() Methode)

decodeURI ( X )

Hier, ' X ” vertegenwoordigt de gecodeerde URI die moet worden gedecodeerd.

Winstwaarde
Het retourneert de gedecodeerde URI als een tekenreeks.

Voorbeeld 1: UTF-8 coderen in JavaScript
Deze demonstratie codeert de doorgegeven combinatie van tekens naar een gecodeerde UTF-8-waarde:

functie codeer_utf8 ( X ) {
opbrengst ontsnap ( codeURI ( X ) ) ;
}
laat val = 'hier' ;
troosten. loggen ( 'Gegeven waarde -> ' + val ) ;
laat codeVal = codeer_utf8 ( val ) ;
troosten. loggen ( 'Gecodeerde waarde -> ' + codeerVal ) ;

Denk hier eens aan de benaderingen voor het definiëren van een functie die is toegewezen voor codering. Pas nu de methode “encodeURI()” toe om de doorgegeven combinatie van tekens weer te geven als een UTF-8-gecodeerde tekenreeks. Definieer daarna op dezelfde manier de te evalueren tekens en roep de gedefinieerde functie aan door de gedefinieerde waarde als argumenten door te geven om de codering uit te voeren.

Uitvoer

Hier is het duidelijk dat de doorgegeven combinatie van tekens met succes is gecodeerd.

Voorbeeld 2: UTF-8 decoderen in JavaScript
De onderstaande codedemonstratie decodeert de gecodeerde UTF-8-waarde (in het vorige voorbeeld):

functie decode_utf8 ( X ) {
opbrengst decodeURI ( ontsnappen ( X ) ) ;
}
laat val = 'à çè' ;
troosten. loggen ( 'Gegeven waarde -> ' + val ) ;
laten decoderen = decode_utf8 ( val ) ;
troosten. loggen ( 'Gedecodeerde waarde -> ' + decoderen ) ;

Verklaar volgens deze code de functie “ decode_utf8() ” die de aangegeven parameter omvat die de combinatie van tekens vertegenwoordigt die moeten worden gedecodeerd met behulp van de “ decodeURI() methode. Specificeer nu de waarde die moet worden gedecodeerd en roep de gedefinieerde functie aan om de decodering toe te passen op de “ UTF-8 vertegenwoordiging.

Uitvoer

Deze uitkomst houdt in dat de eerder gecodeerde waarde dienovereenkomstig wordt bepaald.

Benadering 3: Codeer/decodeer UTF-8 in JavaScript met behulp van de reguliere expressies

Deze aanpak past de codering zodanig toe dat de multi-byte Unicode-tekenreeks wordt gecodeerd naar UTF-8-tekens van meerdere enkel-bytes. Op dezelfde manier wordt de decodering zo uitgevoerd dat de gecodeerde string terug wordt gedecodeerd naar Unicode-tekens van meerdere bytes.

Voorbeeld 1: UTF-8 coderen in JavaScript
De onderstaande code codeert de multi-byte Unicode-tekenreeks naar UTF-8 single-byte-tekens:

functie codeer UTF8 ( val ) {
als ( soort van val != 'snaar' ) gooien nieuw TypeError ( 'De parameter' val 'is geen tekenreeks' ) ;
const string_utf8 = val. vervangen (
/[\u0080-\u07ff]/g , // U+0080 - U+07FF => 2 bytes 110jjjjj, 10zzzzzz
functie ( X ) {
was uit = X. charCodeAt ( 0 ) ;
opbrengst Snaar . van CharCode ( 0xc0 | uit >> 6 , 0x80 | uit & 0x3f ) ; }
) . vervangen (
/[\u0800-\uffff]/g , // U+0800 - U+FFFF => 3 bytes 1110xxxx, 10yyyyyy, 10zzzzzz
functie ( X ) {
was uit = X. charCodeAt ( 0 ) ;
opbrengst Snaar . van CharCode ( 0xe0 | uit >> 12 , 0x80 | uit >> 6 & 0x3F , 0x80 | uit & 0x3f ) ; }
) ;
troosten. loggen ( 'Gecodeerde waarde met reguliere expressie -> ' + string_utf8 ) ;
}
codeer UTF8 ( 'hier' )

In dit codefragment:

  • Definieer de functie “ codeerUTF8() ” bestaande uit de parameter die de waarde vertegenwoordigt die moet worden gecodeerd als “ UTF-8 ”.
  • Pas in de definitie een controle toe op de doorgegeven waarde die niet de tekenreeks is, met behulp van de “ soort van ” operator en retourneer de opgegeven aangepaste uitzondering via de “ gooien trefwoord.
  • Pas daarna de “ charCodeAt() ' En ' vanCharCode() ' methoden om respectievelijk de Unicode van het eerste teken in de tekenreeks op te halen en de gegeven Unicode-waarde naar tekens te transformeren.
  • Roep ten slotte de gedefinieerde functie op door de gegeven reeks tekens door te geven om deze waarde te coderen als een “ UTF-8 vertegenwoordiging.

Uitvoer

Deze uitvoer geeft aan dat de codering op de juiste manier is uitgevoerd.

Voorbeeld 2: UTF-8 decoderen in JavaScript
In deze demonstratie wordt de reeks tekens gedecodeerd naar “ UTF-8 ” vertegenwoordiging:

functie decoderenUTF8 ( val ) {
als ( soort van val != 'snaar' ) gooien nieuw TypeError ( 'De parameter' val 'is geen tekenreeks' ) ;
const str = val. vervangen (
/[\u00e0-\u00ef][\u0080-\u00bf][\u0080-\u00bf]/g ,
functie ( X ) {
was uit = ( ( X. charCodeAt ( 0 ) & 0x0f ) << 12 ) | ( ( X. charCodeAt ( 1 ) & 0x3f ) << 6 ) | ( X. charCodeAt ( 2 ) & 0x3f ) ;
opbrengst Snaar . van CharCode ( uit ) ; }
) . vervangen (
/[\u00c0-\u00df][\u0080-\u00bf]/g ,
functie ( X ) {
was uit = ( X. charCodeAt ( 0 ) & 0x1f ) < '+str);
}
decodeUTF8('à çè')

In deze code:

  • Definieer op dezelfde manier de functie “ decoderenUTF8() ” met de parameter die verwijst naar de doorgegeven waarde die moet worden gedecodeerd.
  • Controleer in de functiedefinitie de stringvoorwaarde van de doorgegeven waarde via de “ soort van exploitant.
  • Pas nu de “ charCodeAt() ”-methode om respectievelijk de Unicode van de eerste, tweede en derde tekenreeks op te halen.
  • Pas ook de “ String.fromCharCode() ”-methode om de Unicode-waarden in tekens om te zetten.
  • Herhaal deze procedure op dezelfde manier opnieuw om de Unicode van de eerste en tweede tekenreeks op te halen en deze Unicode-waarden om te zetten in tekens.
  • Open ten slotte de gedefinieerde functie om de UTF-8-gedecodeerde waarde te retourneren.

Uitvoer

Hier kan worden gecontroleerd of de decodering correct is uitgevoerd.

Conclusie

Het coderen/decoderen in UTF-8-weergave kan worden uitgevoerd via de “ enodeURIComponent()” En ' decodeURIComponent() methoden, de “ codeURI() ' En ' decodeURI() '-methoden, of met behulp van reguliere expressies.