Hvorfor har du brug for kodning?
Den mindste lagringsenhed i computeren er byte (byte), og antallet af tegn, der kan repræsenteres af en byte, er begrænset, 1byte=8bit, en byte kan højst repræsentere 255 tegn, og der findes mange sprog i verden, der er forskellige tegn, som ikke kan repræsenteres af en byte, så char-repræsentationstegnet i Java er for at løse dette kodningsproblem, én char optager to bytes, så den skal kodes mellem char og den mindste enhedsbyte. Det modsatte er dekodning.
Faktisk er kodning og dekodning den færdige oversættelsesproces ("oversættelse" er let at forstå), og forskellige kodningsmetoder er ordbøger.
1. ASCII-kode
Det fulde navn er American Standard Code for Information Interchange, som er verdens mest almindelige enkeltbyte-kodningssystem, hovedsageligt brugt til at vise moderne engelsk og andre vesteuropæiske sprog.
ASCII-kode repræsenteres af 7 bit, som kun kan repræsentere 128 tegn, og 0~31 repræsenterer kontroltegn som enter, backspace, delete osv.; 32~126 betyder, at de trykte tegn kan indtastes via tastaturet og kan vises.
Blandt dem er 48~57 0 til 9 ti arabiske tal, 65~90 er 26 store engelske bogstaver, 97~122 er 26 små engelske bogstaver, og resten er nogle tegnsætningstegn, operationssymboler osv., som kan referere til ASCII-standardtabellen for detaljer.
2、ISO-8859-1
Denne kodning er en udvidelse af ASCII-kodningen, men det er stadig en enkeltbyte-kodning og kan kun repræsentere i alt 256 tegn.
Da ASCII kun kan repræsentere 128 tegn, kan displayet ikke udtrykkes fuldt udISO-8859-1 udvider ASCII-kodningOven på ASCII-koden tilføjes de tilsvarende tekstsymboler fra vesteuropæiske sprog, græsk, thai, arabisk og hebraisk, og den er bagudkompatibel med ASCII-kodning.
3、GB2312
Det fulde navn for GB2312 er "Information Technology Chinese Encoding Character Set", som er en to-byte kodning med et kodningsområde A1-F7, hvoraf A1-A9 er symbolområdet, der indeholder i alt 682 symboler; B0-F7 er kanji-området og indeholder 6763 kanji.
Det fulde navn er et kinesisk tegnsæt for informationsudveksling, som blev udgivet af Kina i 1980 og hovedsageligt bruges til kinesisk tegnbehandling i computersystemer. GB2312 indeholder hovedsageligt 6763 kinesiske tegn og 682 symboler.
GB2312 dækker det meste af brugen af kinesiske tegn, men kan ikke håndtere særlige sjældne tegn som oldkinesisk, så koder som GBK og GB18030 dukkede op senere.
4、GBK
Det fulde navn for GBK er "Chinese Character Internal Code Extension Specification", som tilsyneladende udvidede GB2312, dens kodningsområde er 8140-FEFE (fjern XX7F), med i alt 23940 kodebits, som kan repræsentere 21003 kinesiske tegn, og dens kodning er kompatibel med GB2312
GBK, det fulde navn for Chinese Internal Code Specification, blev formuleret i 1995. Den udvider hovedsageligt GB2312 og tilføjer flere kinesiske tegn på sin basis, som indeholder i alt 21.003 kinesiske tegn.
GBK er bagudkompatibel med GB2312-kodning, hvilket betyder, at de kinesiske tegn, der kodes i GB2312, kan dekodes normalt med GBK og ikke vil fremstå utydelige, men de kinesiske tegn, der kodes med GBK, er ikke nødvendigvis dekodet med GB2312.
5、GB18030
GB18030 fulde navn er Chinese Character Internal Code Extension Specification, som er det seneste interne kodetegnsæt udgivet i 2000 og håndhævet i 2001, inklusive sprogtegnene for de fleste etniske minoriteter i Kina, og indeholder mere end 70.000 kinesiske tegn.
Den bruger hovedsageligt enkelt-byte, dobbeltbyte og fire-byte tegnkodning, og den er bagudkompatibel med GB2312 og GBK, selvom det er en obligatorisk standard i vores land, men den bruges sjældent i faktisk produktion, og de mest anvendte er GBK og GB2312.
6. UNICODE
For at deres sprog kan vises normalt i computeren, har hvert land og region sin egen kode, så ingen kender hinandens kode, hvis der er for mange koder, foreslog ISO-organisationen på dette tidspunkt en ny kode kaldet UNICODE-kodning til at understøtte globale kulturer, tegn og symboler. Da UNICODE blev formuleret, var computerkapaciteten ikke længere et problem, så det blev designet til at være fastlagt på to bytes, og alle tegn blev repræsenteret i 16 bit, inklusive engelske tegn, der tidligere kun optog 8 bit, hvilket ville være spild af plads, og UNICODE blev ikke promoveret og anvendt i lang tid.
7、UTF-16
Fremkomsten af UTF-16 er ISO for at skabe en ny supralingual ordbog, hvorigennem alle verdens sprog kan oversætte hinanden; du kan forestille dig, hvor kompleks og enorm denne ordbog er. UTF-16 bruger to bytes til at repræsentere Unicode-konverteringsformatet (to bytes er 16 bit, så UTF-16) er en fast længde repræsentationsmetode, det vil sige, at ethvert tegn kan repræsenteres i to bytes. Det gør det meget bekvemt at repræsentere karakterer. Der er dog også en fejl, nemlig at en stor del af tegnene kan repræsenteres i én byte, men UTF-16 bruger to bytes, hvilket er spild af lagerplads. Så der er en anden måde at kode på, som er UTF-8.
UTF-16 er den specifikke implementering af UNICODE, 16 er 16 bit, UTF-16 er oprindelsen, der definerer, hvordan UNICODE-tegn gemmes i computeren, UTF-16 bruger også to bytes til at repræsentere ethvert tegn, hvilket gør operationsstrengen meget effektiv, hvilket også er en vigtig grund til, at Java bruger UTF-16 som format for tegn til lagring i hukommelsen.
UTF-16 er velegnet til brug mellem disk og hukommelse, og konverteringen af tegn og bytes til og fra hinanden vil være enklere og mere effektiv, men den er ikke egnet til netværkstransmission, som kan beskadige bytestrømmen.
8、UTF-8
UTF-8 bruger en variabel længde-teknologi, hvor hvert kodningsområde har forskellige kodelængder, og forskellige typer tegn kan bestå af 1-6 bytes.
Kodningsreglerne for UTF-8 er som følger:
1) Hvis det er 1 byte og den højeste bit er 0, betyder det, at dette er 1 ASCII-tegn. Det kan ses, at alle ASCII-kodninger allerede er UTF-8
2) Hvis det er 1 byte, startende med 11, indebærer antallet af på hinanden følgende 1'ere antallet af bytes af dette tegn, for eksempel: 110xxxxx betyder, at det er den første byte af et dobbeltbyte UTF-8-tegn
3) Hvis det er 1 byte, startende med 10, betyder det, at det ikke er den første byte, du skal se frem for at få den første byte af det aktuelle tegn.
Selvom UTF-16 er meget effektivt, er det også den største ulempe ved UNICODE, da alle enkeltbyte-tegn skal tage højde for to bytes, og lagringspladsen fordobles, hvilket åbenlyst forbruger ressourcer og ikke passer til den nuværende situation med hurtig udvikling af internettet. Så med UTF-8 er det en implementering af variabel længde tegnkodning af UNICODE, som kan bruge 1~6 bytes med fast længde til at kode UNICODE-tegn.
UTF-8 bruger enkeltbyte-lagring til ASCII-tegn, og hvis et enkelt tegn bliver ødelagt, vil det ikke påvirke efterfølgende tegn, så UTF-8 er ideelt til traditionel online og er en af de mest udbredte kodninger i dag.
Hvis du vil repræsentere kinesisk, er UTF-8 kodningseffektivitet større end GBK og mindre end UTF-16, så det er også den mest ideelle kodningsmetode ud over GBK. |