Il nome "Unicode" identifica il charset UTF-16 BE (big endian). È solo uno dei possibili formati di codifica del Unicode!!Originariamente inviato da pavimento
Se il file ha codifica Unicode e faccio
InputStreamReader isr = new InputStreamReader(fis,"Unicode");
funziona.
No, in linea di massima e in modo completo/generico non è possibile. Puoi leggere un certo tot di byte iniziali del file e fare una qualche stima o analisi statistica per cercare di dedurre il più possibile che tipo di file è.Originariamente inviato da pavimento
Quindi vorrei sapere se c'è un modo per sapere a priori la codifica del file in modo da caricare ogni volta quella giusta.
Ma non puoi determinare qualunque tipo di charset. Ci sono charset single-byte come ad esempio ISO-8859-1 e ISO-8859-2 e altri. Come li distingui?? Se ti trovi un byte 0xA9, in ISO-8859-1 significa "©" mentre in ISO-8859-2 significa "Š". Come capisci se è uno o l'altro charset??? Solo eventualmente interpretando il significato e il contesto del testo. Cosa ardua da fare programmaticamente!!!
Sarebbe più facile distinguere un UTF-8 da UTF-16 (BE o LE), specialmente se il file avesse un BOM (byte order mark) che comunque non è affatto obbligatorio (e raramente lo si trova).
In linea generale comunque no e se volessi provare a determinare il charset, non ci sono classi/metodi già fatti nel framework, sarebbe tutto a tuo carico.