I set di caratteri - fabiovitali.it · • Es.: in ASCII, i caratteri di controllo hanno la forma...
Transcript of I set di caratteri - fabiovitali.it · • Es.: in ASCII, i caratteri di controllo hanno la forma...
I set di caratteri
Fabio VitaliCorsi di laurea in Informatica e Informatica per il ManagementAlma Mater – Università di Bologna
Il w
eb d
ei d
ati
Il w
eb d
ei d
ocum
enti
Il w
eb d
ei p
rogr
amm
i
Le b
asi
Argomentidellelezioni
HTTPURI
Codificadeicaratteri
XML
CSSHTML
Markup
Server-sideNodeJsClient-sideJavascriptJS frameworkWeb ServiceREST
Linked DataOntologie
SPARQL
RDF
Introduzione
• Quiesaminiamoinbreve:– Ilproblemadellacodificadeicaratteri– ASCII(7bitedesteso)– ISO/IEC10646eUNICODE– UCSeUTF– Contentencoding
Isetdicaratteri
• LaglobalizzazionediInternethapropostoilproblemadirenderecorrettamenteglialfabetidimigliaiadilinguenelmondo.
• Ilproblemanonsiponeperiprotocolli,chetrattanobyteinterpretatidaapplicazioni,anchese“percaso” sonosignificativiperpersonedilinguainglesequandoscrittiinUS-ASCII
• Ilproblemasiponeperilcontenutodeiprotocolli,inquantodeveessereevidenteenonambiguoilcriteriodiassociazionediunbloccodibitaduncaratterediunalfabeto.
Larappresentazionebinariadeltesto
• Perrappresentaretesto,ènecessariofornireunarappresentazionedigitale(cioènumerica)deglielementifondantidellascrittura.
• Identificareglielementifondanti(caratteri)• Identificarelospaziodirappresentazione• Creareunmappingedargliun'ufficialità(standard)
Icaratteri(1)• Ilcarattereèl’entitàatomicadiuntestoscrittoinunalingua
umana.• Inalfabetidiversiicaratterihannoparticolaritàdiverse:
– Neglialfabetididerivazionegreca(greco,latinoecirillico),esisteladistinzionetramaiuscoleeminuscole,ignotaaltrove
– Neglialfabetididerivazionelatinasisonoinventatisegniparticolarisulleletterepersoddisfareleesigenzedellevarielinguechelousano(accenti,segnidiacritici,ecc.).
– Inebraico,levocalisonomodificatorigraficidellaformadelleconsonanti
– Inarabo,lavicinanzadiletterediversenellaparolaprovocauncambiamentonellaformadelleletterestesse.
– Incinese,èpossibilecrearenuovicarattericomecomposizionedialtricaratteriesistenti.
– …etc…
Icaratteri(2)
Linguediverseassocianoaicaratteriruolidiversi:rappresentanodivoltainvoltasuoni,sillabe,intereparole.Esistonotreaspettidiuncarattere:
– Lasuanatura(didifficileattribuzione:aeàsonolastessalettera?)– Lasuaforma,oglifo(conambiguità:P haunsuononeglialfabeti
latini,eunaltroneglialfabetigreciecirillici;inoltreifontcreanoformeanchemoltodiverseperlestesselettere).
– Ilsuocodicenumerico:inbaseadunatabellapiuttostocheun’altra,letterediverse,dialfabetidiversi,hannolostessocodicenumerico,olastessaletterahacodicidiversi.
Lospaziodirappresentazione• Ladigitalizzazioneimplical'identificazionediunoinsiemedi
valorinumericidaassociareaicaratteri.• Questaassociazionepuòesserearbitrariaosecondoregole.• Ledueregolepiùimportantisono• Ordine:ivalorinumericiseguonol'ordinealfabetico
culturalmentericonosciuto• Contiguità:ognivalorenumericocompresotrailpiùbassoeil
piùaltoèassociatoaduncarattere.• Raggruppamento:l'appartenenzaadungruppologicoè
facilmentericonoscibiledaconsiderazioninumeriche.• Es.:inASCII,icaratteridicontrollohannolaforma00xxxxxx,i
caratterimaiuscolihannolaforma10xxxxxx eicaratteriminuscolihannolaforma11xxxxxx.
Altriterminifrequenti
• Shift:uncodiceriservatochecambiamappadaadessoinpoi.Lostessoshift ounsecondocaratteredishift,puòpoifartornareallamappaoriginaria
• Codiciliberi:codicinonassociatianessuncarattere.Laloropresenzainunflussodidatiindicaprobabilmenteunerroreditrasmissione.
• Codicidicontrollo:codiciassociatiallatrasmissioneenonalmessaggio.
Notazionibinarieedesadecimali(1)
• Larappresentazionebinaria(0b)edesadecimale(hex,0x)sibasanosuunsistemanumeraleposizionalecompostoda2e16(24)carattericiascuno.– Inumeribinariusanosolo0e1– Inumeriesadecimali0123456789ABCDEF.
• Lastessamatematicasiapplicaindipendentementedalsistemanumerale,cambiasololarappresentazione.
Decimal Binary Hex
14+25=39 0b001110+0b011001=0b100111 0x0E+0x19=0x27
14= (1*101 +4*100)+25=(2*101 +5*100)=
(0*25+0*24 +1*23+1*22 +1*21+0*20)+(0*25+1*24 +1*23+0*22 +0*21+1*20)=
0x0E=(0*161 +14*160)+0x19=(1*161 +9*160)=
39=(3*101 +9*100) (1*25+0*24 +0*23+1*22 +1*21+1*20) 0x27=(2*161 +7*160)
Notazionibinarieedesadecimali(2)
• Poiché 16=24,c'èunaconnessionedirettatrarappresentazionebinariaeesadecimaledeinumerisecondocuiognibloccodi4cifrebinarie(bit)corrispondeadunacifraesadecimale.
• Quindiunbytecompostoda8cifrebinarieècompostodaduecifreesadecimali:– Peresempio,0b11001110 può essere diviso in1100-1110,epoiché 0b1100 =0xC e0b1110 =0xE,hoche0b11001110 =0xCE (=206indecimale).
Brevericapitolodimatematicabinaria
• 1bit:21combinazioni: 2valori• 2bit:22combinazioni: 4valori• 4bit:24combinazioni: 16valori• 5bit:25combinazioni: 32valori• 6bit:26combinazioni: 64valori• 7bit:27combinazioni:128valori• 8bit:28combinazioni:256valori• 16bit:216combinazioni:65536valorio65kvalori• 32bit:232combinazioni:4.294.967.296=4Gvalori
Baudot• Inventatonel1870daEmileBaudot,francese,inventoredellaprimatelescrivente(untrasmettitoremorseapplicatoadunamacchinadascrivere)
• Usatoneitelexetelescriventi,erauncodicea5bit,peruntotaledi32codicipossibili,maattraversol'usodiuncodiceperloshift lettereeunoperloshift numeri,avevauntotaledi64codici:– 50tralettere(solomaiuscole),numeriepunteggiatura– 9codicidicontrollo– 2shift– 3codiciliberi
• Lacodificanonènécontiguanéordinata.
ASCII
(AmericanStandardCodeforInformationInterchange)– standardANSI(X3.4- 1968)chedefiniscevaloriper128caratteri,
ovvero7bitsu8.Nellostandardoriginaleilprimobitnonèsignificativoedèpensatocomebitdiparità.
– ASCIIpossiede33caratteri(0-31e127)dicontrollo,tracuialcuneripetizioniinutili
• Backspace(spostalatestinaindietrodiuncarattere,utilenelletelescriventi- 08[0x08])eDelete(cancellatuttiibuchidiuncarattereinunaschedaperforata,cioètuttibuchi,1111111- 127[0x7F]).
• Carriage Return(riportalatestinaall'iniziodiriga- 13[0x0C])eLineFeed (girailcarrellodiunariga- 10[0x0A])checausanomolteconfusionineisistemimoderni.
– Glialtri95sonocaratteridell'alfabetolatino,maiuscoleeminuscole,numeriepunteggiatura.Codificacontiguaedordinata.Noncisonocodiciliberi.
EBCDIC
ExtendedBinary Characters forDigitalInterchangeCode
– Codificaproprietaria(IBM,1965)a8bit,vieneusataneisuoimainframe.Contemporaneodell'ASCII
– IBMèmoltopiùsicuradellasuperioritàdeisuoichip,esiazzardafindagliannicinquantaadusaretuttie8ibitdelbyte.
– 56codicidicontrolloemoltelocazionivuote,mentreleletteredell'alfabetoNONsonocontigue,maorganizzateinmododaavereilsecondosemibyte chevariada0a9(0x081-0x89,0x91-0x099,0xA1-0xA9,ecc.).
ISO646-1991
– UnacodificaISOperpermetterel'usodicaratterinazionalieuropeiinuncontestosostanzialmenteASCII.
– PresentaunaInternationalReferenceVersion(ISO646IRV)identicaall'ASCIIeuncertonumerodiversioninazionali
– ISO646lascia12codiciliberiperleversioninazionalideivarilinguaggieuropei.Ognitabellanazionalelausaperiproprifini.
– Icaratterisacrificatisono:#$@\ ¬`{|}~
LecodepagediASCII• Quandoiniziòadesseredisponibiledell'hardwareaffidabile
venneropropostedelleestensionidiASCIIperusareirimanenti128caratteri(128-255)
• IBM(e,separatamente,Microsoft)proposerounmeccanismodiestensionimultipleedindipendentidiASCIIperlenecessitàdiscript,alfabetiedusidiversi,chiamatecodepage.
• Esistonosvariatecentinaiadicodepage,conqualchecarattereincomuneamoltidiversi.
• Poichénonc'èmododisaperequalecodepageèstatausatainunfileditestooinunflussodati,dobbiamoscoprirlodafontiesterne.
• Comunque,icaratterida0a127sonoquellidiASCII
CP737(PCCode page 737)
• Unacodepagedeicodiciperl'alfabetogreco.
• Inrealtàdicodepageperilgreconeesistonoalmenotre,maquestaeralapiùpopolare.
KOI7andKOI8КодОбменаИнформацией,8бит
• Unacodificapericaratteridelcirillicorealizzatadalgovernosovieticonel1974
• Laversionea7bitusaduecaratteriswitchperpassareaicaratterilatini.
• VennesostituitadaWindows1252epoidaUnicode
CodificheCJK
• Ilcinese,ilGiapponeseeilKoreano (CJK)condividonomolticaratteriepercuitradizionalmentesonostaticodificatiinsieme.
• Poichéicaratterisonomoltidipiùdi256,nonèpossibileusareunacodificaa8bit,masonostatiusatecodifichea16bit(56kcombinazioni)eanchepiùlarghe(Unicode almomentocodifica70.000caratteridiCJK)
• Comeminimo,unaragionevolecodificadiCJKdevesupportareicaratteriHan(condivisitraletrelingue)pù specificiscriptfoneticicomepinyin,bopomofo,hiragana,katakana andhangul– Big5(Taiwan,Macau,HongKong),EUC-JP(Japanese),GB18030(Official
PeopleRepublicofChinaencoding),EUC-KR(Korean)
ISO8859/1(ISOLatin1)
• EstensionidiASCIIsonostatefatteperutilizzareilprimobiteaccedereatuttii256caratteri.NessunadiquesteèstandardtranneISOLatin1
• ISO8859/1(ISOLatin1)èl’unicaestensionestandardecomprendeuncertonumerodicaratterideglialfabetieuropeicomeaccenti,ecc.
• ISOLatin1èusatoautomaticamentedaHTTPealcunisistemioperativi.
• OvviamenteISOLatin1ècompatibileall’indietroconASCII,dicuièunestensioneperisolicaratteri>127.
L'esigenzadiunostandardinternazionale
• Esistonodozzinedicodifichea8bitperalfabetinonlatini(e.g.,cirillico,grecoegiapponesesemplificato)ealcunecodifichea16bitperlinguaggiorientali(cinese).
• Asecondadellacodificausata,possoaveredozzinediinterpretazionidiverseperlostessocodicenumerico.
• Debboricorreredunqueameccanismiindipendentidalflussoperspecificareiltipodicodificausata.Adesempio:– dichiarazioniesterne– Intestazioniinterne– Interpretazionedidefaultdelleapplicazioniusate
• Ancorapiùdifficileèilcasodiflussimisti(untestoitalo-arabo,adesempio),perchéènecessarioadottaremeccanismidishift daunacodificaall'altra,inevitabilmentedipendentidall'applicazioneusata.
UnicodeeISO/IEC10646(1)
• Ilcompitodicreareunostandardunicoèstatoaffrontatoindipendentementedaduecommissionidistandard,Unicode eISO/IEC10646.
• Leduecommissioni,unaindustriale,l'altraespressionegovernativa,hannolavoratoindipendentementeperleprimeversioni,salvopoiconvergere
• Attualmentelaversione10.0diUnicode elaversioneISO/IEC10646-1:2017associanosostanzialmenteglistessicodiciaglistessicaratteri.Questoperònonègarantitonelfuturo.
• Sonodefinitecodifichealunghezzafissa(UCS-2eUCS-4),ecodifichealunghezzavariabile(UTF-8,UTF-16eUTF-32)
UnicodeeISO/IEC10646(2)Almomentodefiniscono137.000caratteridiversi,più140.000assegnatiascopiprivati,divisiintrecategorie:
– Scriptmoderni• Latin;Greek;Cyrillic;Armenian;Hebrew;Arabic;Syriac;Thaana;Devanagari;Bengali;Gurmukhi;Oriya;Tamil;Telegu;Kannada;Malayalam;Sinhala;Thai;Lao;Tibetan;Myanmar;Georgian;Hangul;Ethiopic;Cherokee;Canadian-Aboriginal Syllabics;Ogham;Runic;Khmer;Mongolian;Han(Japanese,Chinese,Korean ideographs);Hiragana;Katakana;Bopomofo andYi,ecc.
– Scriptantichi• Aegean;Alphabetic andsyllabic LTR&RTL;Brahmic;African scripts;Scriptsforinvented languages;Cuneiform;Undeciphered scripts;NorthAmericanideographs andpictograms;Egyptian andMayan hieroglyphs;Sumerianpictograms;LargeAsianscripts;
– Segnispeciali• punctuation marks,diacritics,mathematical symbols,technical symbols,arrows,dingbats,etc.Discussioniparticolarmenteinfuocatesugliemoji (6.0– 2010)esuitonidicoloredellapelle(8.0– 2015)
StarTrek,LordoftheRingeUnicode
• StarTrek eilSignoredegliAnellifannopartedalungotempodellaculturapredominantedegliinformaticioccidentali.
• SiaGeneRoddenderry siaJ.R.R.Tolkienhannocercatoplausibilitàecomplessitàneglialfabetidaloroinventati.Esistonoquindigrammatiche,vocabolariealfabeticomplessi,descrittienotiperKlingon,Ferengi eElfico(Cirth).Èpossibilestudiarliedimpararlionline.
• Nel1997vennepropostol'inserimentodell'alfabetoKlingon.Essovennecondizionalmenteaccettatoedfecepartedeglialfabetiincorsodiapprovazioneperquattroanni,evennedefinitivamenterifiutatanel2001,quandovennecreatalaPrivateUseArea(PUA)diUnicode:
– 6400codicinelBasicMultilingual Plane– 65kcodicinelpiano15e65knelpiano16.
• Unicode nonliassegneràmai,manonesisteunaassegnazione"ufficiale"diquesticodiciechiunquepuòusarlicomecrede.
• Tuttavia,almenoperquelcheriguardaicodiciBMPedelpiano15,c'èuncatalogoufficiosodiassegnazionichiamatoConScript Unicode Registry (scriptsforconstructedlanguages),checontieneadoggipiùdi50scriptdiversi
IprincipidiUnicode(1)
• Repertoriouniversale– tuttiicaratteridituttiglialfabeti
• Efficienza– Minimousodimemoriaemassimavelocitàdiparsing.Inparticolare,
raggruppamenti,allineamentoeassenzadishift.• Caratteri,nonglifi
– ifontsonocompletamenteesclusidaqualunqueconsiderazionenellaspecificadelcodice(c'èpostosoloperuncarattereA,indipendentementedalnumerodifontesistenti)
• Semantica– Ognicaratterepossiedeunsuosignificatopreciso(laß tedescaèdiversa
dallaß greca)nonchéproprietàcomedirezione,esigenzedispaziatura,capacitàdicombinazione
• Testosemplice– Icodepoint rappresentanocaratteriditestosemplice,senzadescrizioni
graficheotipografiche(nonc’èilbold).
IprincipidiUnicode(2)• Ordinelogico
– lesottosequenze diunostessoalfabetoseguonol'ordinenaturalealfabeticodeiparlanti
• Unificazione– Carattericomunialinguaggidiversi,sepossibile,vengonounificatiinun
singolocodice.– Ades.,icaratterigiapponesiecoreanichehannolostessovalorein
cinesevengonodefiniticonun'unicacodifica.• Composizionedinamica
– Alcunicaratteri(inarabo,incinese,maanche,banalmente,lelettereaccentateoconmodificatorideglialfabetieuropei)sonocomposizionidiframmentiindipendenti.Questiframmentihannocodiciindipendentievengonocreatipercomposizione.
– Peròincerticasiricorreresempreadundoppiocodiceperlouncaratterecompostoèeccessivo.Alloraperipiùcomuni(sancitidaunusofrequente)esisteuncodicesingoloequivalente,chiamato“sequenzaequivalente”
IprincipidiUnicode(3)
• Stabilità– Icodici,unavoltaassegnati,nonpossonopiùessererimossiediventanoimmutabili.
• Convertibilità– EsisteunfacilemeccanismodiconversionetraUnicodeealtrecodificheprecedenti,inmododaminimizzareglisforzidiaggiornamentodelsoftware.
ISO/IEC10646(1)
ISO10646ècompostodidueschemidicodifica.– UCS-2èunoschemaaduebyte.E’ un’estensionediISOLatin1.
– UCS-4èunoschemaa31bitin4byte,estensionediUCS-2.E’ divisoingruppi,piani,righeecelle.
ASCII
T 01010100 ISO Latin 1
UCS-2
- 1010100
01010100
01010100
00000000
0000000000000000- 0000000 UCS-4
gruppo piano riga cella
non usato
ISO/IEC10646(2)
• InUCS-4esistonodunque32768pianidi65536carattericiascuno.Ilprimopiano,opiano0,ènotocomeBMP(BasicMultilingual Plane)edèovviamenteequivalenteaUCS-2.
• Attualmentesonodefiniticaratterisononeiseguentipiani:– Piano0(BMPoBasicMultilingual Plane):tuttiglialfabetimoderni– Piano1(SMPoSupplementary Multilingual Plane):tuttiglialfabeti
antichi– Piano2(SIPoSupplementary Ideographic Plane):ulterioricaratteri
ideograficiCJK(chinese,japanese,Korean)nonpresentiinBMP.– Piano14(SSPoSupplementary Special-purpose Plane):Caratteritag
DaUCSaUTF
• Nellamaggiorpartedeicasiitestiscrittiutilizzerannosoltantounodeglialfabetidelmondo.
• Inoltre,lamaggiorpartedeglialfabetistanelBMP,elamaggiorpartedeidocumentisonoscrittiinASCII.
• E’ dunqueunosprecoutilizzarequattrobyteperognicarattereinquestocaso.
• Inquestocaso,sononecessarisoltantounaminimapartedeicaratteridiUCS.
• UTF(Unicode Transformation FormatoUCSTransformationFormat)èunsistemaalunghezzavariabilechepermettediaccedereatuttiicaratteridiUCSinmanierasemplificataepiùefficiente.
UTF-8(1)
• UTF-8permettediaccedereatuttiicaratteridefinitidiUCS-4,mautilizzaunnumerocompresotra1e4byteperfarlo.– Icodicicompresitra0- 127(ASCIIa7bit),erichiedonounbyte,incuicisia0alprimobit
– Icodiciderivatidall'alfabetolatinoetuttigliscriptnon-ideograficirichiedono2byte.
– Icodiciideografici(orientali)richiedono3byte– Icodicideipianialtirichiedono4byte.
UTF-8(2)
00000000 UCS-40xxxxxxx
UTF-80xxxxxxx
Se il primo bit è 0, si tratta di un carattere ASCII di un byte.
00000yyy UCS-4yxxxxxxx
Se i primi due bit sono 11, si tratta di un carattere appartenente ad un alfabeto non ideografico.
UTF-810xxxxxx110yyyyx
z z z z z yyy UCS-4yxxxxxxx
Se i primi tre bit sono 111, si tratta di un carattere appartenente ad un alfabeto ideografico.
UTF-810xxxxxx10 z yyyyx1110 z z z z
00000000- 0000000
00000000- 0000000
00000000- 0000000
UTF-8(3)
lunghezza Bit di continuazione
wwz z z z z y UTF-16yxxxxxxx
Se i primi quattro bit sono 1111, si tratta di un carattere che in UTF-16 utilizza coppie di surrogati (caratteri appartenenti ad un piano non BMP ma già precisato).
UTF-810xxxxxx10 z yyyyx10uu z z z z11110uuu
110111yy110110ww
N.B.: uuuuu = wwww+1 per complesse ragioni
In generale, il primo byte contiene tanti 1 quanti sono i byte complessivi per il carattere (lunghezza).Il secondo byte e gli altri contengono la sequenza 10 (bit di continuazione) e 6 bit significativi. Se il byte inizia per 10, allora è un byte di continuazione e debbo ignorarlo fino al primo byte utile.
UTF-8(4)
Ricapitolando:
11110uuu
È un carattere UTF-8 completo da ASCII0xxxxxxx
10 z yyyyx È un byte di continuazione
110yyyyx Primo byte di un carattere di uno script alfabetico
1110 z z z z Primo byte di un carattere di uno script ideografico
Primo byte di un carattere che non sta in BMP ma è già noto
111110uu Non definito. Apparterrebbe ad un piano non ancora occupato
Little-endian,big-endian
• Alcuniprocessorigeneranoegestisconoiflussidicoppiedibyteponendoilbytepiùsignificativoprima,altridopoilbytemenosignificativo.
• Adesempio,ilcarattereUTF-164F52sarebbeorganizzatocome4F52susistemibig-endian (processoriMotorola,IBMeingeneraleRISC),ecome524Fsusistemilittle-endian (Intelecloni,DEC,ealtriCISC).
• Questohadeglieffettinotevolisullecapacitàdiinterpretarecorrettamenteflussidibyteprovenientidaqualcheprocessoreignoto.
• Inparticolare,ricevendounflussodichiaratoUTF-16oUCS-2,comepossoesseresicurodiqualesiailmodellodimemorizzazioneoriginario?
ByteOrderMark(BOM)
• Unicode specificauncodice,FFFE,comesegnalatorediordinamentodelflusso.
• FEFFèilcarattereZero-Width No-BreakSpace(ZWNBSP),uncaratterechepuòessereusatoinqualunquecontestodiwhitespace (cioèovunquetranneinmezzoalleparole)senzamodificareilsignificatodeitesti.Lasuaformacorrispondenteinlittle-endian,FFFE,èuncarattereproibitoinUnicode.
• Unicode suggeriscealloradiutilizzareuncarattereZWNBSPall'iniziodiogniflussoUTF-16eUCS-2.SeilprocessorericeveFEFFdeducecheilsistemasorgenteèbig-endian,altrimenticheèlittle-endian,edecidediriconvertireilflussosuquestabase.
• IlcarattereFEFFusatoperquestoscopoèalloranotocomeByteOrderMark,oBOM.PoichélaconversionedaeperUTF-8deveesseretotalmentetrasparente,anchemoltiflussiUTF-8contengonoilBOM.
DifferenzetraUTF-8eISOLatin-1
• NonconfonderelecodificheUTF-8eISOLatin-1!• PericaratteriappartenentiadASCII,leduecodifichesono
identiche.Quindiundocumentoininglesenonavràdifferenzeneltesto(aparte,adesempio,virgoletteinglesiotrattini,ecc.).
• Viceversa,untestoinitaliano,ofranceseotedescorisultaquasicorretto,perchénonvengonodescrittecorrettamentesololedecorazionidiletterelatine(adesempio,accenti,umlaut,vocaliscandinaveecc.).
• Inquestocaso,UTF-8utilizza2byteperquesticaratteri,mentreISOLatin1neusaunosolo!
Unesempio
• Ilcarattere“é” occupainUCS-2laposizione00E9.
00000yyy UCS-2yxxxxxxx
UTF-810xxxxxx110yyyyx
00000000 00E911101001
00E91010100111000011
C3 A91010100111000011ISO Latin-1Qui sta l’errore:
Se il carattere UTF-8 00E9 viene interpretato come ISO Latin-1, viene letto come una sequenza di due caratteri,C3 A9, corrispondente a “é”
http://www.filehungry.com/italian
Cos'èilcontentencoding
• Moltiambientiinformaticifornisconorestrizionisullavarietàdicaratteriusabili.Ipiùnotisono– Modellidirappresentazionideidati(ades.:stringheneilinguaggidiprogrammazione,formatidati,linguaggidimarkup,etc.).Spessoalcunicaratterihannoscopitecniciinterniallinguaggio,enonèpossibileutilizzarlisemplicementecomecontenuto
– Canaliditrasmissione(ades:protocolliInternet):moltidiquesticanalisonostaticreatiquandoASCII7bitimperava,enonsonotrasparentiall'usodiflussididatia8bit(8bitclean).
Terminifrequenti
• Escaping:ilcarattereproibitovieneprecedutoosostituitodaunasequenzadicaratterispeciali.– String c="Questastringa\"contiene\"caratterispeciali";– <p>Questastringa"contiene"caratterispeciali</p>
• Encoding:ilcarattereproibitovienerappresentatonumericamenteconilsuocodicenaturalesecondounasintassispeciale– "felicit\u00E0";– <p>felicità</p>– <p>felicità</p>
L'originedeiproblemi:SMTP
SimpleMailTransferProtocol
• ÈunodeiprotocollidiVIIlivellopiùimportantidiTCP/IP,sicuramenteilpiùanticora quelliancorainusooggi(1982).
• SMTPèunprotocollotext-based,perloscambiodimessaggidipostaelaverificadeidestinatarideimessaggi.
• UnaconnessioneSMTPècompostadaunaapertura,unoopiùsequenzedicomandi,edunachiusura.
• Adognicomandocorrispondeunarispostacompostadauncodicenumericoedunastringaleggibile.– MAILFROM:<[email protected]>
250OK– RCPTTO:<[email protected]>
550Nosuch user here
LimitidiSMTP
• QuestisonoilimitifondamentalidiSMTP:– Lalunghezzamassimadelmessaggioèdi1Mb– IcaratteriaccettatisonosoloASCIIa7bit– OgnimessaggiodevecontenereunasequenzaCRLFogni1000caratteri
omeno(alcuneanticheimplementazioniloaggiungevanoautomaticamentesenonlotrovavano).
• Questilimitiimpedisconolatrasmissionedidocumentibinari:– Unfilebinariousatuttii256tipidibyte– Unfilebinariopuòfacilmenteesserepiùlungodi1Mb– InunfilebinariolasequenzaCRLFèunasequenzacometuttelealtre,
epuòesserciomancaresenzavincoli.Introdurlaartificialmentepuòcorrompereilfile.
• MIMEpermettedibypassarequestilimitiall'internodiSMTP
MIME
Multipurpose InternetMailExtensions
• RFC822definisceconsufficientedettaglioilformatodegliheader deimessaggiSMTP,maspecificainmodomoltogenericocheilcorpodiunmessaggiodeveesseresemplicetestoUS-ASCII.
• MIMEridefinisceilformatodelcorpodiRFC822perpermettere:– MessaggiditestoinaltrisetdicaratterialpostodiUS-ASCII– Uninsiemeestensibilediformatipermessagginontestuali– Messaggimulti-parte– Header consetdicaratteridiversidaUS-ASCII.
• IlmessaggiononcompatibileconSMTPvienetrasformatoinunoopiùmessaggiSMTPdaunpreprocessorealserverSMTP
• All’arrivo,iloimessaggiSMTPvengonodecodificatieriaccorpatiaformareilmessaggiooriginale.
ServerSMTP
ServerSMTP
Mess.non
SMTPMess.SMTPMess.SMTPMess.SMTPMess.SMTP
MIME
MIME
Mess.non
SMTP
MessaggiMIMEsucanaliSMTP
• Ancoraoggi,quellocheviaggiasuuncanaleSMTPèunpuromessaggioSMTPconglistessilimitidiallora.
IlimitiSMTPsuMIME• Codificacaratteri
– ilmessaggiochecontienecaratterinonASCIIvienecodificatoinmanieraappropriata,cosicchéciòchevieneeffettivamentetrasmessosiaveramenteASCII7bit.Iltransferencoding èdiversopermessaggiditestoemessaggibinari(es.immagini).
• SequenzeCRLF– Tuttiisistemiditransferencoding adottanounmeccanismoper
permetterelapresenzadisequenzeCRLFinmezzoalflussodidati,alcunianziprevedendoliinmanieraforzataognitotcaratteri(76,perlopiù).
• Lunghezzamessaggi– UnprocessoreMIMEpuògenerarevarimessaggiSMTPdaunsingolo
messaggioMIME,ciascunoinferioreperdimensioneallimiteSMTP.Ilprocessoreall’arrivosioccupadiverificareilcorrettoarrivodituttiisingolimessaggiSMTPericostituisceilmessaggioMIMEoriginario
IserviziMIME
• Dichiarazioneditipo– TuttiimessaggiMIMEvengonoidentificatidaunContentType,che
definisceiltipodidatidelmessaggioeaiutal’applicazionericeventeagestireilmessaggioeainvocarel’applicazionepiùadatta.
– N.B.:l’attribuzionedell’applicazionenonvienefattasullabasedell’estensionedelnomedelfile.
• Messaggimulti-tipo– UnmessaggioMIMEpuòcontenerepartiditipodiverso(es.un
messaggioditipotestoeunattachmentbinario).Inquestocasosicreanodeisottomessaggi MIMEperciascunaparte(conilsuobravocontent-type)eilmessaggioMIMEcomplessivodiventa“multi-parte”,qualificandoecodificandoinmanieradiversaciascunasottoparte.
HeaderspecificiMIME
• MIMEintroducealcuninuoviheader SMTP:– Content-Type:iltipoMIMEdelcontenuto.Serveperpermetterealriceventediscegliereilmeccanismopiùadattoperpresentareidati.Specificalanaturadeldatotramitelaspecificazioneditipo,sottotipoeulterioriparametriutili.
• Content-Type:text/plain;charset=ISO-8859-1
– Content-Transfer-Encoding:iltipodicodificautilizzatapertrasmettereidati.ServeperlatrasmissionesucanaleSMTPdidatichenonsononaturalmentecorrettisecondoleregolediSMTP:7bit,sequenzeCRLFogni1000caratteriomeno.Sonovaloriaccettabili“7bit” (default),“8bit”,“binary”,“quoted-printable”,“base64” oaltrestringhedefinitenelregistroIANA
• Content-Transfer-Encoding:base64
MIME- Quotedprintable
• Unodeiduetipidicontent transferencoding definitidaMIME.VieneusataperlatrasmissionedidatichecontengonogrossequantitàdibytenelsetUS-ASCII,esolopocheeccezioni– Adesempio,documentitestualiinlingueeuropee.
• Codificadunquesoloqueipochibytenonconformi.Peresempio:– Uncodicesuperioreal127oinferioreal32vienecodificatoconla
sintassi“=“ +codiceesadecimale.Adesempio“ICSE’99” diventa“ICSE=B499”
– Righepiùlunghedi76caratterivengonointerrottecon“softbreaks”,cioèconunugualecomeultimocaratteredellalinea.
MIME- Base64
• Base64èuntipoditransferencoding MIMEsuggeritoperdatibinariomulti-byte.
• Vieneidentificatounsottoinsiemedi64caratteridiUS-ASCIIsicuri(hannolastessacodificaintutteleversionidiISO646).Questisono:– leletteremaiuscole(26,'A'=>0),– Lelettereminuscole(26,'a'=>26),– Inumeri(10,'0'=>52)– Icaratteri'+'e'/'(=>62e63rispettivamente).
• Ogniflussodidativienesuddivisoinblocchidi24bit(3byte).Alorovoltaquesti24bitsonosuddivisiin4blocchidi6bitciascunoecodificatisecondounatabellaprefissatainunodei64caratterigiàdescritti.
MIME– Base64(2)
• Lastringarisultantevienedivisainrighedi76caratteri(trannel'ultima,cheèlungaquantodeveessere)conl'aggiuntadiCR-LF.
• NelladecodificaicodiciCReLFsonodaignorare.• LadecodificadiBase64èalgoritmica,banale,nonusachiaviné
calcolidiparticolaricomplessità.• Base64NONÈunatecnicacrittografica!!!
Conclusioni
Quiabbiamoparlatodisetdicaratteri– Alunghezzafissa,7,8bit(ASCII,EBCDIC,ISOLatin1)
– Alunghezzafissa,16,31bit(UCS-2,UCS-4)– Alunghezzavariabile,1-4*8bit(UTF-8,UTF-16)
– Iproblemidicodificaediordinamentodeibyte– Meccanismidiencoding
Riferimenti
• N.Bradley,TheXMLcompanion,AddisonWesley,1998,cap.13.
• K.Simonsen,Character Mnemonics &Character Sets,RFC1345,IETF,June 1992
• D.Goldsmith,M.Davis,UTF-7,AMail-Safe TransformationFormatofUnicode,RFC2152,IETF,May 1997
• TheUnicode consortium,Unicode®8.0.0,Released:2015June17,http://unicode.org/versions/Unicode8.0.0/