Esportare da xPages ad Excel: problemi di encoding

Per un progetto nuovo ho dovuto affrontare un aspetto su cui non avevo mai lavorato.

Il progetto è tutto di sviluppo in xPages su Domino; so che può sembrare strano nel 2023 sviluppare ancora in xPages ma ci sono delle funzionalità e delle caratteristiche che vengono ancora utili.

Probabilmente HCL non investirà più su xPages e non ci saranno nuovi sviluppi ma quello che già esiste è più che suffciente per coprire molti aspetti e, nel caso specifico, fare esattamente quello che mi serviva.

Tornando al problema specifico quello che mi serviva è un export da xPages in formato Excel o almeno in .csv per poi avere i dati in Excel.

Facendo una ricerca ho trovato subito un ottimo esempio sul sito notesin9.com a quasto link : http://www.notesin9.com/wp-content/uploads/2011/01/XPagesCheatSheet-85×11-v1.pdf
Come potete vedere alla pagina 3 c’è esattamente il pezzo di codice che mi serviva e quindi credevo di avere la soluzione del problema .
Ho seguito le indicazioni riportando il codice nel mio progetto e tutto, apparentemente, funzionava senza problemi. Apparentemente.

Quello che invece mi sono ritrovato è stato il più classico dei problemi nella codifica dei caratteri accentati che risultavano assolutamente fuori posto .
Ho pensato ovviamente all’encoding dei dati ed ho fatto diversi tentativi passando da UTF-8 ad altri senza però che cambiasse nulla, continuavo ad ottenere lo stesso risultato:

ed a questo punto ho scoperto che aprendo lo stesso file con un editor di testo (Notepad o simili) i caratteri venivano riconosciuti correttamente.
Che il problema fosse Excel ? Ebbene si . Excel ha bisogno un dato in più chiamato Byte Order Mark o BOM ( vedi qui per i dettagli) per interpretare i caratteri correttamente.

Vi risparmio le altre verifiche che ho fatto in giro per siti come Stackoverflow , la soluzione alla fine è molto semplice : all’inizio del file (che sia in formato .csv o MS Excel ) le prime informazioni che Excel deve trovare sono la sequenza di byte del BOM per interpretare correttamente il tutto.

Quindi nel codice della mia xPage , cioè quello che ho trovato nell XPages Cheat Sheet, ho aggiunto una variabile

var universalBOM = "\ufeff";

e poi al momento in cui scrivo fisicamente il file la primissima write è proprio di questa variabile.

 

0 commenti