Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Ottenere codifica file

  1. #1

    Ottenere codifica file

    Vorrei caricare un file di testo e ottenere tutte le righe che lo compongono.
    Se il file ha codifica ANSI funziona tutto, altrimenti no (ovvero escono simboli strani).

    Ho fatto cosi:

    FileInputStream fis = new FileInputStream(f);
    InputStreamReader isr = new InputStreamReader(fis);
    BufferedReader br = new BufferedReader(isr);
    String linea = br.readLine();

    // ectect

    Se il file ha codifica Unicode e faccio

    InputStreamReader isr = new InputStreamReader(fis,"Unicode");

    funziona.

    Quindi vorrei sapere se c'è un modo per sapere a priori la codifica del file in modo da caricare ogni volta quella giusta.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Ottenere codifica file

    Originariamente inviato da pavimento
    Se il file ha codifica Unicode e faccio

    InputStreamReader isr = new InputStreamReader(fis,"Unicode");

    funziona.
    Il nome "Unicode" identifica il charset UTF-16 BE (big endian). È solo uno dei possibili formati di codifica del Unicode!!

    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.
    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 è.
    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.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.