ExcelDataReader – No data is available for encoding 1252

Lo scorso mese durante uno sviluppo ho avuto la necessità di convertire un file xlsx tramite ExcelDataReader in formato testuale (csv/txt) all’interno di una Azure Function scritta in NETCore3. Sulla carta era tutto semplice, ma il classico problema dietro l’angolo era pronto a farmi visita. La fase di sviluppo, i primi test in locale ed i successivi in cloud sono andati via lisci senza alcun problema. Nel momento in cui ho dato in pasto alla function dei file non mie e provenienti dall’estero con una codifica totalmente diversa dalla nostra sono cominciati i problemi e le eccezioni .

NotSupportedException: No data is available for encoding 1252

Aprendo il live stream della function ed Application Insight il messaggio di errore era molto chiaro: NotSupportedException: No data is available for encoding 1252. Il come risolverlo per permettere la conversione di tutti i file excel quello non lo era. Dopo una serie di ricerche (sia lodato StackOverflow in primo luogo) la soluzione è talmente semplice che sono scoppiato a riderci sopra per sdrammatizzare il momento di panico.

La soluzione si base su due (+1) passaggi veramente semplici

  1. Tramite nuget aggiungere il pacchetto System.Text.Encoding.CodePages

  2. Tramite nuget aggiornare il pacchetto ExcelDataReader precedentemene installato (non è obbligatorio, ma consigliato)

  3. Aprire il file Startup.cs e cercare il metodo public void ConfigureServices(IServiceCollection services)

Ed ora? Vi basterà modificare ConfigureServices nel seguente modo: Startup - ConfigureServices

1
2
3
4
5
6
7
8
9

public void ConfigureServices(IServiceCollection services)
{
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
// Or Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
 
    // your code ...
}

Ora non vi resta che provare il tutto ed -in teoria- il problema è risolto!