Définition
Dans le matériel informatique, le codage fait référence à l'utilisation du magasin de code pour présenter des groupes de données, ce qui en fait des informations qui peuvent être traitées et analysées par un ordinateur.
Convertirlesdonnéesencodesoucaractèrescodésetpeuventêtretraduitesdansleformulairededonnéesd'origine.
Les nombres binaires de N bits peuvent être combinés en 2 à la puissance 1 d'informations différentes, un groupe de codes spécifique est spécifié pour chaque information. Ce processus est également appelé codage.
Il existe deux types de codes couramment utilisés dans les systèmes numériques, l'un est le code binaire et l'autre est le code décimal.
Connaissances en codage
introduction
GB2312 et GBK sont couramment utilisés dans les normes de codage GB.
GBK utilise des doubles octets Indique que la plage de codage globale est de 8140-FEFE, que le premier octet est compris entre 81-FE et que le dernier octet est compris entre 40-FE et que la ligne xx7 F est exclue.
Encodageclassification
1.Zone de caractères chinois.Incluant :
a.GB2312Zonedescaractèreschinois.C'est-à-direGBK/2 :B0A1-F7FE.6763LescaractèreschinoisGB2312sontinclusdanslacommanded'origine.
b.GB13000.1étend la zone des caractères chinois.
(1)GBK/3:8140-A0FE.Ilcontient6080CJKcaractèreschinoisenGB13000.1.
(2)GBK/4 :AA40-FEA0.Contient8160caractèreschinoisCJKetdescaractèreschinoissupplémentaires.
Les caractères chinois CJK sont disposés au recto en fonction de la taille du code UCS ; les caractères chinois supplémentaires (y compris les radicaux et les composants) sont disposés au verso en fonction du numéro de page/de la position des caractères du « Dictionnaire Kangxi ».
2.Zone de symboles graphiques.Incluant :
a.GB2312 zone de numéros de caractères non chinois. C'est-à-dire GBK/1 : A1A1-A9FE.
Ily aégalement10chiffresromainsminusculesetGB12345symbolessupplémentaires.717symbolessontcomptés.
b.GB13000.1étendlazonedescaractèresnonchinois.C'estàdireGBK/5:A840-A9A0.BIG-5lessymbolesdescaractèresnonchinois,lescaractèresdestructureet"○"sontdisposésdanscettezone.166symbolessontcomptés.
3.Zone définie par l'utilisateur :elleestdiviséeen(1)(2)(3)troisdistricts.
(1)AAA1-AFFE,avec564points de code.
(2)F8A1-FEFE,avec658points de code.
(3)A140-A7A0,avec672points de code.
Bien que la zone (3) soit ouverte aux utilisateurs, son utilisation est restreinte car elle n'exclut pas la possibilité d'ajouter de nouveaux personnages dans cette zone à l'avenir.
Voici quelques conseils :
Tout d'abord,enphp,lecodagedescaractèresestbasésurlecodageenvoyé,donccequiestutiliséLecodagesaisiparl'utilisateurneserapasmodifiéautomatiquement,maisdansasp,lecodagepardéfautestunicode,onpeut doncfacilementobtenirlecomparaisondesencodagessurlatabledegbk->unicode,de sorte qu'ilpeutêtreunmêmes'iln'existepasdebibliothèquedebase.
2.Parce que GBK est la valeur la plus élevée et la plus basse est 0x40, qui est de 64, parfois lors de l'organisation de certaines chaînes impliquant le chinois, les caractères sont divisés, il est préférable de les utiliser sous forme de codes ci avant 64, de sorte qu'il n'y aura pas de caractères brouillés à remplacer ou à segmenter en toutes circonstances.
Système
ASCII
ThefileswecomeintocontactwitheverydayaredividedintoASCIIandBinary.ASCIIistheabbreviationof "AmericanStandardCodeforInformationInterchange", whichcanbecalled "AmericanStandard" .TheAmericanStandardstipulatesthat128numbersfrom0to127areusedtorepresentthecanonicalcodesofinformation, including33controlcodes, aspacecode, and94imagecodes.TheimagecodeincludesEnglishuppercaseandlowercaseletters, Arabicnumerals, punctuationmarks, etc.TheEnglishcomputertextsweusuallyreadaretransmittedandstoredintheformofimagecodes.TheAmericanStandardistheuniversalcodeformostlargeandsmallcomputersintheworld.
Cependant, acharacterinacomputerismostlyrepresentedbyaneight-digitbinarynumber.Inthisway, thereare256differentvalues, whichcanbeusedtorepresent256differentcharacters.SincetheAmericanStandardonlystipulates128codes, theremaining128codesarenotregulated, andtheirusagevaries.Inaddition, theusageofthe33controlcodesintheAmericanStandardisnotconsistentacrossmanufacturers.Inthisway, whenweexchangefilesbetweendifferentcomputers, itisnecessarytodistinguishbetweentwodifferenttypesoffiles.EverywordinthefirsttypeofdocumentisanAmericanstandardimagecodeoraspacecode.Suchfilesarecalled "ASCIITextFiles", orslightly "TEXTFILES", andtheycanusuallybedirectlyexchangedbetweendifferentcomputersystems.Thesecondtypeofdocuments, thatis, documentscontainingcontrolcodesornon-USstandardcodes, ne peuvent généralement pas être échangés directement entre différents systèmes informatiques.
Norme nationale
"NationalStandard" istheabbreviationof "ChineseCharacterCodeforNationalStandardInformationExchangeofthePeople'sRepublicofChina" .Thenationalstandardtable (basictable) arrangesmorethan7,000Chinesecharacters, punctuationmarks, foreignletters, etc., intoasquarematrixwith94rowsand94columns.Eachhorizontalrowinthephalanxiscalleda "zone", andeachzonehasninety quatre "positions" .ThecoordinateofaChinesecharacterinthesquarematrixis calledthe "locationcode" ofthecharacter.Forexample, lemot"中"esten48èmepositiondelazone54delamatricecarréeetsoncodedepositionest5448.
Enfait, thenumberis94.ItisthetotalnumberofimagecodesintheAmericanStandard.Thenationalstandardtablecontinuestousethisnumber, andtheoriginalintentionisprobablytousetwoAmericanstandardsymbolstorepresentaChinesecharacter.SincethecodeoftheAmericanstandardimagesymbolisfrom33to126, if32isaddedtotheChinesecharacterareacode, itwilloverlapwiththerangeoftheAmericanstandardimagecode.Asintheaboveexample, thewordareaandbitcodeof "中" areaddedwith32toobtain86,80.Thehexadecimaldigitsofthesetwonumbersareputtogethertoget5650, whichiscalledthe "nationalstandardcode" oftheword, andthetwoAmericanstandardsymbolscorrespondingtoit, vice-président, estle "nationalstandardsymbol" oftheword "中" ..
Dans un document qui utilise un mélange de chinois et d'anglais, « VP » représente-t-il le mot « 中 », ou représente-t-il des initiales anglaises ?
Bien que cette solution ait résolu le problème d'origine, de nouveaux problèmes sont apparus.
Afin de distinguer les deux « normes nationales » ci-dessus, nous appelons le code de norme nationale qui chevauche le code d'image standard américain de « norme nationale pure », et le code de norme nationale de CCDOSplus128 est appelé « norme quasi-nationale ».
GBK
Le code GBK est un codage de caractères étendu du code GB. Il code plus de 20 000 caractères chinois simplifiés et traditionnels.
Fromthepracticalpointofview, MicrosofthasadoptedGBKcodesincethesimplifiedChineseversionofwin95.ItincludesTrueTypeSongtiandHeitiGBKfonts (providedbyBeijingZhongyiElectronics), whichcanbeusedforDisplayandprint, andprovidefourinputmethodsforGBKChinesecharacters.Inaddition, thebrowserIE4.0providesatwo-wayconversionfunctionofGBK-BIG5codeinthesimplifiedandtraditionalChineseversions.Inaddition, inthelanguagepackprovidedbyMicrosoftforIE, thetwofontlibrariesofSimplifiedChineseLanguageSupportKit (SimplifiedChineseLanguageSupportKit), SongandHei, arealsoGBKChinesecharacters (providedbyZhuhaiSitongComputerTypesettingSystemDevelopmentCompany) .SomeotherChinesefontmanufacturershavealsobeguntoprovideTrueTypeorPostScriptGBKfonts.
De nombreuses plates-formes chinoises plug-in, telles que NJStar, Richwin, etc., fournissent une prise en charge du code GBK, y compris des bibliothèques de polices, des méthodes de saisie et des convertisseurs pour GBK et d'autres codes chinois.
Sur Internet, de nombreuses pages Web utilisent des codes GBK.
Mais la plupart des moteurs de recherche ne peuvent pas bien prendre en charge la recherche de caractères chinois GBK, et certains moteurs de recherche en Chine continentale ne peuvent pas entièrement prendre en charge la recherche de caractères chinois GBK.
En fait,GBKestuneautrenormedecodagedescaractèreschinois,lenomcompletest"ChineseInternatialCodeSpecification"(ChineseInternatialCodeSpecification),promulguéen1995.
GBK est compatible vers le bas avec le codage GB-2312 et prend en charge vers le haut la norme internationale ISO 10646.1.
GBKspecificationincludesallCJKChinesecharactersandsymbolsinISO10646.1, andsupplements.Specificallyinclude: allChinesecharactersandnon-ChinesecharacternumbersinGB2312; otherCJKChinesecharactersinGB13000.1.Atotalof20902ChinesecharactersinGB; 52ChinesecharactersthatarenotincludedinGB13000.1inthe "SimplifiedGeneralTable"; 28radicalsandimportantcomponentsin "KangxiDictionary" et "Cihai" thatarenotincludedinGB13000.1; 13ChinesecharacterstructuresSymbols; 139graphicsymbolsinBIG-5thatarenotincludedinGB2312butexistinGB13000.1; 6pinyinsymbolssupplementedbyGB12345; 19verticalgraphicalsymbolssupplementedbyGB12345 (GB12345supplementsGB2312Thereare29punctuationmarks , 10ofwhicharenotincludedinGB13000.1, soGBKwillnotacceptthem); 21ChinesecharactersselectedfromtheCJKcompatibilityareaof GB13000.1; 31IBMOS / 2specialsymbolsfromGB13000.1.GBKalsousesdouble-byterepresentation.Theoverallencodingrangeisbetween0x8140and0xFEFE, thefirstbyteisbetween0x81and0xFE, andtheendbyteisbetween0x40and0xFE.The0x ×× 7Flineiseliminated, andatotalof 23940codesIlcomprend21886caractèresetsymbolesgraphiqueschinois,dont21 003caractèreschinois(y comprisradicauxetcomposants)et883symbolesgraphiques.
BIG5
Le code BIG5 est un codage de caractères chinois pour les caractères chinois traditionnels, qui est largement utilisé dans les systèmes informatiques à Taïwan et à Hong Kong.
Code HZ
LecodeHZestgénéréparlesétudiantschinoisafindepermettreauxinformationsencaractèreschinoisd'êtretransmisesdirectementsurInternet.Commelaplupartdessystèmesderéseau(occidentaux)ontactuellement7bits,lebitleplusélevéestdemandé,donclescodesGBnepeuventpasêtretransmisdirectement.
Thecharacteristicofthe "HZ" schemeisthattheChineseandAmericanstandardcodesofthe "purenationalstandard" aremixed.Sohowdoes "HZ" distinguishbetweenthenationalstandardandtheAmericanstandard Theanswerisactuallyverysimple: whenanationalstandardcodeisinsertedinthemiddleofastringofAmericanstandardcodes, weadd ~ ~ infrontofthenationalstandardcodeand attheend.Theseadditionalcodesarecalled "escapecode" et respectively.SincetheseadditionalcodesthemselvesarealsoAmericanstandardimagecodes "de escapecode", theentirefileislikeanAmericanstandardtextfile, whichcanbesafelytransmittedonthecomputernetwork, andisalsocompatiblewithmostEnglishtextprocessingsoftware.
Code CJC
ISO-2022 est une norme de codage établie par l'Organisation internationale de normalisation (ISO) pour les caractères dans différentes langues.
ISO
En 1993, la norme internationale ISO 10646 a défini le jeu de caractères universel (UCS).
UCScontainscharactersusedtoexpressallknownlanguages.NotonlyincludesdescriptionsinLatin, grec, slave, hébreu, arabe, ArmenianandGeorgian, butalsohieroglyphssuchasChinese, JapaneseandKorean, aswellashiragana, katakana, bengali, andPunjabiLanguageGurmukhi, Tamil, Kannada, Malayalam, thaï, lao, ChinesePinyin (bopomofo), Hangul, Devangari, gujarati, Oriya, Teluguandotherlanguages .Forlanguages thathavenotyetbeenadded, theywillallbeaddedeventuallyastheyarebeingstudiedhowtobestencodetheminthecomputer.Theselanguages includeTibetian, rouges, Runic (ancientNorsescript), Ethiopie, otherhieroglyphs, andvariousIndo-Europeanlanguages, aswellasselectedartisticlanguages suchasTengwar, CirthandKlinTribute (Klingon) .UCSalsoincludesalargenumberofgraphic, impression, mathematicalandscientificsymbols, includingallprovidedbyTeX, Postscript, MS- DOS, MS-Windows, Macintosh, les polices OCR et de nombreux autres systèmes de traitement et de publication de mots.
ISO10646definesa31-bitcharacterset.However, inthishugecodingspace, onlythefirst65534codebits (0x0000to0xFFFD) havebeenallocatedsofar.This16-bitsubsetofUCSiscalledBasicMultilingualPlane (BMP) .Charactersotherthan16-bitBMPareveryspecialcharacters (suchashieroglyphs), andtheyareonlyusedbyexpertsinthefieldsofhistoryandscience.Accordingtothecurrentplan, inthefuture, theremaynolongerbecharactersassignedtothe21-bitencodingspacefrom0x000000to0x10FFFF, whichcoversmorethan1millionpotentialfuturecharacters.TheISO10646-1standardwasfirstpublishedin1993anddefinesthestructureofthecharactersetandcontentintheBMP.ThesecondpartofISO10646-2, whichdefinescharacterencodingsotherthanBMP, estenpréparation,maisilpeutprendreplusieursannéespourêtreterminé.
UCSnotonlyassignsacodetoeachcharacter, butalsogivesitanofficialname.AhexadecimalnumberrepresentingaUCSorUnicodevalue, usuallyprefixedwith "U +", justlikeU + 0041representsthecharacter "LatincapitalletterA" .UCScharactersU + 0000toU + 007FareconsistentwithUS-ASCII (ISO646), etU + 0000toU + 00FFarealsoconsistentwithISO8859-1 (Latin-1) .FromU + E000toU + F8FF, alargerangeofcodesotherthanBMParereservedforprivateuse.
En 1993, theUSC-4 (UniversalCharacterSet) definedinISO10646usedawidthof4bytestoaccommodateaconsiderableamountofspace, butthisobesecharacterstandardwasatthetimeEventhe21stcenturyhasitsunrealisticside, thatis, itwillexcessivelyoccupystoragespaceandaffecttheefficiencyofinformationtransmission.Atthesametime, theUnicodeorganizationbegantodevelopa16-bitcharacterstandardwithUniversal, unique, andUniformabout10yearsago.Inordertoavoidthecompetitionbetweenthetwo16-bitencodings, thetwoorganizationsbegantonegotiatein1992inordertofindacompromise.Point, thisistoday'sUCS-2 (BMP, BasicMultilingualPlane, 16bit) andUnicode, buttheyarestilldifferentsolutions.
Unicode
À propos d'Unicode, nous devons retracer son origine.
WhencomputersspreadtoEastAsia, theyencounteredcountriessuchasChina, Japon, andSouthKoreathatusedideographiccharactersinsteadofalphabeticlanguages.Inthelanguages usedinthesecountries, thereareasmanyasthousandsofcommonlyusedcharacters, buttheoriginalcharactersusesingle-byteencoding.Themaximumnumberofcharactersthatcanbeaccommodatedinacodepageisonly2 ^ 8 = 256.Thisistrueforlanguages thatuseideographiccharacters.Powerless.Sinceonebyteisnotenough, naturallypeopleusetwobytes, sothereisadouble-bytecodedcharacterset (DBCS) .Toutefois, althoughtheideographiccharactersinthedouble-bytecharactersetusetwo-byteencoding ,lecodeASCIIetleskatakanajaponaissonttoujoursexpriméssurunoctet,cequiapportebeaucoupdeproblèmesauprogrammeur,carchaquelorsqu'il s'agitdetraiterdeschaînesDBCS,ilfauttoujoursjugersiunoctetreprésenteuncaractèreouundemi-caractère.
Les gens sont constamment à la recherche d'un meilleur schéma d'encodage des caractères, et le résultat final est qu'Unicode est né. Unicode est en fait un jeu de caractères à large octet.
Unicode est utilisé dans les réseaux, les systèmes Windows et de nombreux logiciels volumineux.
Typesdecodage
L'encodage est un processus cognitif d'explication de la perception de base des stimuli entrants. Techniquement parlant, il s'agit d'un processus de conversion complexe en plusieurs étapes, d'une entrée sensorielle plus objective (telle que la lumière et le son) à une expérience subjectivement significative.
L'encodage des caractères est basé sur des règles qui peuvent être utilisées pour déterminer un ensemble de caractères du langage naturel (tels qu'un alphabet ou un tableau de syllabes), et un ensemble d'autres éléments (tels qu'un numéro ou une impulsion téléphonique) pour l'appariement.
Codage de texte
Le codage de texte utilise un langage de balisage pour marquer la structure et d'autres caractéristiques d'un texte afin de faciliter le traitement informatique.
Codage sémantique
L'encodage sémantique est un langage formel B pour coder sémantiquement le langage formel A, c'est-à-dire utiliser le langage B pour exprimer tout le vocabulaire du langage A (comme les programmes ou la description) par une méthode.
Codage électronique
L'encodage électroniqueconvertitunsignalencode,quiestoptimisépourlatransmissionoulestockage.Laconversionestgénéralementréaliséeparuncodec.
Codage PCM
La modulation par code d'impulsion PCM est l'abréviation de Pulse Code Modulation.
Codage neuronal
Le codage neuronal fait référence à la manière dont les informations sont représentées dans les neurones.
Codage de la mémoire
L'encodage de la mémoire est le processus de conversion des sentiments en souvenirs.
Chiffrement
Le chiffrement est le processus de transformation des informations à des fins de confidentialité.
Décodage
Le transcodage est le processus de conversion du codage d'un format à un autre.
Modification du jeu de caractères
Conversion de code facile à implémenter
Tout d'abord, utilisez la famille de fonctions iconv pour la conversion de code
Lors de l'encodage de la conversion sous LINUX, vous pouvez utiliser la programmation de la famille de fonctions iconv pour y parvenir, vous pouvez également utiliser la commande iconv pour y parvenir, mais cette dernière concerne les fichiers, c'est-à-dire que le fichier spécifié est converti d'un encodage à un autre.
Lefichierd'en-têtedelafamilledefonctionsiconvesticonv.h,quidoitêtreinclusavantl'utilisation.
#inclure
Lafamilledefonctionsiconvatroisfonctions,leszonesprototypessontsuivantes :
(1)iconv_ticonv_open(constchar*tocode, constchar*fromcode)
Cettefonctionindiquequelsdeuxencodagesserontconvertis,verscodeestl'encodagecibleetàpartirdecodeestl'encodaged'origine.
(2)size_ticonv(iconv_tcd,char**inbuf,size_t*inbytesleft,char**outbuf,size_t*outbytesleft)
Cettefonctionlitlescaractèresd'inbufetconvertitEnsuite,lasortieenbuf,enoctetsrestantestutiliséepourenregistrerlenombredecaractèresquin'ontpasétéconvertis,etlesoctetsensortiesontutiliséspourenregistrerl'espacerestantdutampondesortie.(3)inticonv_close(iconv_tcd)
Cette fonction permet de fermer le gestionnaire de conversion et de libérer des ressources.
Exemple1 :Exemple de programme de conversionimplémentéenlangageC
/*fc:CodeconversionexampleCprogram*/
#inclure
#defineOUTLEN255
principale()
{
char*in_utf8="姝e?ㄥ??瑁?"
char*in_gb2312="Installation"
charout[OUTLEN]
//codeunicodetogb2312code
rc=u2g(in_utf8,strlen(in_utf8),out,OUTLEN)
printf("unicode-->gb2312out=%sn",out)
//gb2312codeconvertedtounicodecode
p>rc=g2u(in_gb2312,strlen(in_gb2312),out,OUTLEN)
printf("gb2312-->unicodeout=%sn",out)
}
//Conversion de code : d'un encodage à un autre
intcode_convert(char*from_charset,char*to_charset,char*inbuf,intinlen,char*outbuf,intoutlen)
{
iconv_tcd ;
intrc ;
char**pin=&inbuf;
char**pout=&outbuf;
cd=iconv_open(to_charset,from_charset);
si(cd==0)retour-1 ;
memset(outbuf,0,outlen);
if(iconv(cd,pin,&inlen,pout,&outlen)==-1)return-1 ;
iconv_close(cd);
retour0 ;
}
// Convertit le code UNICODE en code GB2312
intu2g(car*inbuf,intinlen,car*outbuf,intoutlen)
{
returncode_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);
}
//GB2312codeconvertiencodeUNICODE
intg2u(car*inbuf,size_tinlen,car*outbuf,size_toutlen)
{
returncode_convert("gb2312","utf-8",inbuf,inlen,outbuf,outlen);
}
Exemple2 : Exemple de programme de conversion implémenté en langage C++
/*f.cpp:CodeconversionexampleC++program*/
#inclure
#inclure
#defineOUTLEN255
p>usingnamespacestd ;
//Classe d'opération de conversion de code
classCodeConverter{
privé:
iconv_tcd ;
Publique:
//Construction
CodeConverter(constchar*from_charset,constchar*to_charset){
cd=iconv_open(to_charset,from_charset;
}
//Déstructuration
~CodeConverter(){
iconv_close(cd);
p>}
//Convertir la sortie
intconvert(char*inbuf,intinlen,char*outbuf,intoutlen){
char**pin=&inbuf;
char**pout=&outbuf;
memset(outbuf,0,outlen);
returniconv(cd,pin,(size_t*)&inlen,pout,(size_t*)&outlen);
}
} ;
intmain(intargc,car**argv)
{
char*in_utf8="姝e?ㄥ??瑁?" ;
char*in_gb2312="Installation" ;
charout[OUTLEN] ;
//utf-8-->gb2312
CodeConvertercc=CodeConverter("utf-8","gb2312");
cc.convert(in_utf8,strlen(in_utf8),out,OUTLEN);
cout<gb2312in="<
//gb2312-->utf-8
CodeConvertercc2=CodeConverter("gb2312","utf-8");
cc2.convert(in_gb2312,strlen(in_gb2312),out,OUTLEN);
cout<utf-8in="<
}
Deuxièmement, utilisez la commande iconv pour la conversion de codage
Lors de l'encodage de la conversion sous LINUX, vous pouvez soit utiliser la programmation de la famille de fonctions iconv, soit la commande iconv à réaliser, mais cette dernière concerne le fichier, c'est-à-dire que le fichier spécifié est converti d'un encodage à un autre.
Lacommandeiconvestutiliséepourconvertirlecodagedufichierspécifié,lasortiepardéfautestverslepériphériquedesortiestandardetlefichierdesortiepeutégalementêtrespécifié.
Utilisation :iconv[Options...][Fichier...]
Lesoptionssuivantessontdisponibles :
Spécification du format d'entrée/sortie :
-f,--from-code=Nom du codage du texte brut
-t,--to-code=Nom de codage de sortie
Information:
-l,--listListedesjeuxdecaractèresconnus
Contrôle de sortie :
-cIgnorerlescaractèresinvalidesdelasortie
-o,--output=FILEfichier de sortie
-s,--avertissement d'arrêt silencieux
--verboseprintprogressinformation
-?,--helpgiveListthesystemhelplist
--usageGivebriefusageinformation
-V,--versionImprimelenumérodeversionduprogramme
Exemple:
iconv-futf-8-tgb2312aaa.txt>bbb.txt
Cettecommandelitlefichieraaa.txt,convertitdel'encodageutf-8àl'encodagegb2312etsasortieestdirigéeverslefichierbbb.txt.
Résumé : LINUX nous fournit un puissant outil de conversion de codage, qui nous apporte du confort.