I set di caratteri - fabiovitali.it · • Es.: in ASCII, i caratteri di controllo hanno la forma...

60
I set di caratteri Fabio Vitali Corsi di laurea in Informatica e Informatica per il Management Alma Mater – Università di Bologna

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.

Adesempio

• Ресторанèunmedi

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!

Problemicomuni(1)

• LeggerecomeLatin-1unfileUTF-8

Problemicomuni(2)

• LeggerecomeLatin-1unfileUTF-16

Problemicomuni(3)

• LeggerecomeUTF-8unfileLatin-1

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

DefinirelacodificasuHTTP

Content encoding

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&quot;contiene&quot;caratterispeciali</p>

• Encoding:ilcarattereproibitovienerappresentatonumericamenteconilsuocodicenaturalesecondounasintassispeciale– "felicit\u00E0";– <p>felicit&#x00E0;</p>– <p>felicit&#224;</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/

www.unibo.it

Fabio Vitali

Corso di tecnologie web, A.A. 2017-18

[email protected]