venerdì 7 giugno 2019

Risolvere problema accentate negli ics calendar (ASP)

L'altro giorno ho fatto una breve guida su come creare un ics in asp/php, grazie alla quale ho potuto aggiungere questa interessante funzionalità ad un sito internet.
Sembrava funzionare tutto alla perfezione, ma alla fine ho scoperto un antipatico bugs con le accentate sull'ics.
Praticamente, la prima volta che ho utilizzato la mia bella pagina asp per generare un ics, nel titolo dell'evento c'era un'accentata, che in fase di import del file calendar in outlook ha dato come risultato di avere una lettera in meno nel titolo.

Subito allarmato dalla sparizione della lettera accentata, ho aperto il file ics con il blocco note (notepad++ in realtà), ed ho notato che in realtà l'accentata era scritta correttamente.
Andando però a guardare il formato del file, ho visto che il charset indicato era ANSI, ed ho subito intuito che in realtà microsoft outlook avrebbe gradito un charset diverso, ovvero il più universale utf8.

Vediamo quindi come risolvere questo problemino con l'ics e le accentate non visualizzate in outlook.



Come risolvere il problema delle accentate nei file ics calendar in ASP


Premessa: la seguente soluzione, anche se ovviamente con sintassi diversa a seconda del linguaggio di programmazione utilizzato, può risolvere in maniera generale il problema accentate ics outlook (ed altri client ovviamente).

Per fixare il bug delle accentate nell'apertura dei file calendar ics con outlook o altri client di posta, basta agire sulla pagina asp ed impostare come charset utf-8.

Bisogna dunque aggiungere all'inizio del file asp, prima di ogni cosa, queste due righe:

<%
@LANGUAGE="VBSCRIPT" CODEPAGE="65001"
Response.CharSet = "UTF-8"
%>

Successivamente per completezza, ma potrebbe non servire, si può aggiungere all'interno del file ics la riga con la specifica del charset usato, che in questo caso è:

CHARSET:UTF-8
Quindi rifacendomi all'esempio dell'altro giorno, lo script finale verrebbe così:

<%
@LANGUAGE="VBSCRIPT" CODEPAGE="65001"
Response.CharSet = "UTF-8"

response.buffer=true
Response.ContentType = "text/calendar"
response.AddHeader"content-disposition","inline;filename=appuntamento.ics"
ris="BEGIN:VCALENDAR"
ris=ris&VBcrlf&"CHARSET:UTF-8"
ris=ris&VBcrlf&"VERSION:2.0"
ris=ris&VBcrlf&"BEGIN:VEVENT"
ris=ris&VBcrlf&"DTSTART;TZID="&stato&"/"&citta&":"&dataorainizioo
ris=ris&VBcrlf&"DTEND;TZID=Italia/Milano:"&dataorafine
ris=ris&VBcrlf&"SUMMARY:"&titolo
ris=ris&VBcrlf&"LOCATION:"&luogo
ris=ris&VBcrlf&"DESCRIPTION:"&titolo&VBcrlf&descrizione
ris=ris&VBcrlf&"PRIORITY:3"
ris=ris&VBcrlf&"END:VEVENT"
ris=ris&VBcrlf&"END:VCALENDAR"
response.write(ris)
%>


Ed ecco che magicamente tutte le accentate ed i caratteri speciali presenti nel file ics calendar generato dalla pagina asp, si apriranno tranquillamente anche su outlook.

Piaciuto l'articolo? Lascia un commento!

EmoticonEmoticon