Voglio ottenere la codifica da un flusso.Java: come posso ottenere la codifica da inputStream?
1o metodo: per utilizzare InputStreamReader.
Ma restituisce sempre la codifica del sistema operativo.
InputStreamReader reader = new InputStreamReader(new FileInputStream("aa.rar"));
System.out.println(reader.getEncoding());
uscita: GBK
secondo metodo - per utilizzare l'UniversalDetector.
Ma restituisce sempre null.
FileInputStream input = new FileInputStream("aa.rar");
UniversalDetector detector = new UniversalDetector(null);
byte[] buf = new byte[4096];
int nread;
while ((nread = input.read(buf)) > 0 && !detector.isDone()) {
detector.handleData(buf, 0, nread);
}
// (3)
detector.dataEnd();
// (4)
String encoding = detector.getDetectedCharset();
if (encoding != null) {
System.out.println("Detected encoding = " + encoding);
} else {
System.out.println("No encoding detected.");
}
// (5)
detector.reset();
uscita: null
Come posso ottenere il giusto? :(
InputStreamReader utilizza sempre la codifica della piattaforma. Non tenta di rilevare la codifica nei file. Che tipo di file stai usando attraverso UniversalDetector? Nel tuo esempio hai usato un file RAR, che è un formato binario compresso. Prova prima con un semplice file di testo ASCII. – prunge
hi, ho cambiato il tipo di file, output 'Fortunes.txt': Nessuna codifica rilevata –
Non sembra rilevare 'standard' UTF-8 o UTF-16 senza BOM, ma ha funzionato per UTF-16 con una BOM per me. Forse prendere in considerazione l'utilizzo di una libreria diversa per il rilevamento del set di caratteri? [Questo collegamento] (http://stackoverflow.com/questions/499010/java-how-to-determine-the-correct-charset-encoding-of-a-stream) potrebbe aiutare. – prunge