333 messaggi dal 05 novembre 2012
...e' solo la mia opinione...giusta o sbagliata...

mi sembra un pò troppo martellata come soluzione

Per es. nel metodo GetFileEncoding vai a gestire WINDOWS-1251 (alfabeto cirillico) e non un caso molto più probabile come per es. Unicode (o BigEndianUnicode)

In caso di encoding non gestito (vedi per es. unicode) nello switch ritorni Encoding.Default, non mi sembra una buona soluzione

Altro ma non importante a livello di valutazione generale...il tuo metodo e nel dettaglio detector.Charset.ToUpperInvariant() andrà in eccezione se la decodifica fallisce, detector.Charset == null

Da quel che ho capito stai utilizzando dotnet core, referenziando la libreria UDE.CSharp il tuo progetto diventa .net framework

Bisogna valutare bene il contesto di utilizzo del tuo applicativo, ma secondo me, senza troppo sforzo si copre in modo più opportuno uno scenario più ampio con new StreamReader("...", enc1252, true)

Ripeto...è solo la mia opinione ed in merito sarebbe interessante conoscerne altre

/Ciao
Modificato da scioCoder il 18 marzo 2019 16:09 -

Alessio
144 messaggi dal 26 febbraio 2007
Secondo me l'osservazione che hai fatto è giustissima.


Ho provato anche il codice che mi hai segnalato e nel caso di ANSI e UTF-8 con BOM funziona.

mentre quando passo un file UTF8, mi perdere i caratteri accentati, credo perchè in realtà lo codifica come ANSI e non come UTF8


Per il discorso di compatibilità con il .Net Core ho trovato il pacchetto compatibile, si chiama UDE.Net, anzichè UDE.CSharp
Modificato da Federico.C il 18 marzo 2019 16:34 -
333 messaggi dal 05 novembre 2012
Per il discorso di compatibilità con il .Net Core ho trovato il pacchetto compatibile, si chiama UDE.Net, anzichè UDE.CSharp

si l'ho visto anche io, c'è ne sono un paio e sono tutti dei forked del progetto errepi/ude...boh non conosco ne il progetto principale ne gli autori...quindi...se non vedo non credo :)

In compenso mentre facevo merenda :):):)

Ho trovato questa libreria, si chiama UTF.Unknown e gli sviluppatori sono gli stessi del progetto NLog

Ci ho giocato un pochino e con due righe di codice risolvi tutti i tuoi problemi :)

public static Encoding GetEncoding(string filePath)
{
    DetectionResult result = CharsetDetector.DetectFromFile(filePath);

    return result.Detected.Encoding ?? CodePagesEncodingProvider.Instance.GetEncoding(result.Detected.EncodingName) ?? Encoding.Default;
}


@Moreno...grazie per la dritta del Charset Detector.

/Ciao

Alessio
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao, prego!
Bene, se avete trovato pacchetti compilati per .netstandard assolutamente sì, usate quelli così è garantito che funzionino.

Comunque, anche le librerie compilate per .NET Framework hanno buona probabilità di poter essere usate così come sono in .NET Core. Infatti, da .NET Core 2.0 sono stati introdotti dei "compatibility shims" che rimappano le chiamate alle API di .NET Framework verso le API di .NET Core. Ecco qui, si parla anche di un tool per verificare la compatibilità.
https://www.aspitalia.com/articoli/asp.net-core/anteprima-aspnet-core-20-p-2.aspx

ciao,
Moreno
Modificato da BrightSoul il 18 marzo 2019 22:21 -

Enjoy learning and just keep making
333 messaggi dal 05 novembre 2012
Ciao Moreno,

Bene, se avete trovato pacchetti compilati per .netstandard assolutamente sì, usate quelli così è garantito che funzionino.

più che un discorso di compatibilità in questo caso (almeno per me, per le valutazioni che di solito faccio) era un problema di libreria a livello generale...

UDE.CSharp (e lo stesso vale anche per gli altri forked compilati per netstandard)...non conoscevo la libreria e non conosco l'autore per altri progetti, i download erano bassi e l'ultimo aggiornamento risale al 2013...insomma l'unica nota positiva è stata la segnalazione da parte di una fonte attendibile :)
Con poco sforzo è saltata fuori la libreria UTF.Unknown, fresca fresca, uscita dalla rc 1 mese fa e fatta da 304NotModified (l'autore di NLog e come biglietto da visita non mi sembra malaccio)
Detto questo non posso dire al 100% che una è meglio dell'altra, ma con queste premesse il mio istinto mi porta a sperimentare con quest'ultima.

Comunque, anche le librerie compilate per .NET Framework hanno buona probabilità di poter essere usate così come sono in .NET Core. Infatti, da .NET Core 2.0 sono stati introdotti dei "compatibility shims" che rimappano le chiamate alle API di .NET Framework verso le API di .NET Core. Ecco qui, si parla anche di un tool per verificare la compatibilità.
https://www.aspitalia.com/articoli/asp.net-core/anteprima-aspnet-core-20-p-2.aspx

Conosco il tool, ai tempi ho installato anche l'estensione per visual studio...ma devo essere sincero...non l'ho utilizzata un granchè
Forse è per questo che mi sfugge qualcosa del suo utilizzo in questo contesto...cerco di spiegarmi meglio
La libreria incriminata è Ude.dll, verifico il livello di compatibilità con il tool e mi da 100%
A questo punto ho due scelte
1) (Licenza permettendo) Scarico i sorgenti, compilo i sorgenti per .netstardard e creo il pacchetto nuget
2) L'ha utilizzo lo stesso nel progetto dotnet core ma perdo la compatibilità con altri os
Mi perdo qualcosa?

Grazie
/Ciao

Alessio
11.886 messaggi dal 09 febbraio 2002
Contributi

2) L'ha utilizzo lo stesso nel progetto dotnet core ma perdo la compatibilità con altri os

Funziona anche su Linux, prova.
Quello che non funziona sono le API specifiche di Windows, tipo il registro. Ma quel pacchetto sta solamente macinando dei byte. Resta inteso che è preferibile usare un pacchetto più aggiornato e per .NETStandard.
Modificato da BrightSoul il 19 marzo 2019 13:38 -

Enjoy learning and just keep making
333 messaggi dal 05 novembre 2012
Ciao Moreno,

quindi...se ho compreso...nonostante il warning che avvisa che è stato compilato per .net framework funziona comunque e questo grazie ai "compatibility shims"...corretto?

se è corretto...fanno qualcosa di simile a mono?

Grazie
Modificato da scioCoder il 19 marzo 2019 13:52 -

Alessio
11.886 messaggi dal 09 febbraio 2002
Contributi
fanno qualcosa di simile a mono?

Uhm, direi di no perché i compatibility shim aggiungono un livello di indirezione. Si tratta di assembly costruiti per imitare quelli originali di .NET Framework (es. mscorlib), in modo che possano soddisfare le dipendenze delle librerie compilate per .NET Framework. Invece di contenere logica vera e propria, si limitano a rimappare sulle API corrispondenti in .NET Core.
E' spiegato bene qui:
https://stackoverflow.com/questions/44464937/compatibility-shim-used-by-net-standard-2-0

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.