4 Stimmen

Geunden 'Abhängigkeit von Standardcodierung' in OutputStream

Wie können wir das von findBugs gemeldete Reliance on default encoding beheben:

    StringBuffer printData = getPrintData(data);

    try {
            OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(new File(linkName)));
            out.write(printData.toString());
            out.flush();

            final FileInputStream f = new FileInputStream(new File(linkName));
            return f;
        } catch (final IOException ioe) {
            ioe.printStackTrace();
        }

Ich schreibe die Datei mit StreamWriter.

8voto

Cozzamara Punkte 1288

Sie konstruieren OutputStreamWriter mit einem Argument. Das bedeutet, dass es den Java-String, der von printData kommt (der Unicode ist), in einen Byte-Strom (Dateiausgabe) unter Verwendung der Standardcodierung des Betriebssystems umwandeln wird, und Sie unterschiedliche Ergebnisse auf verschiedenen Maschinen erhalten können, abhängig von ihren Lokalisierungseinstellungen.

Zum Beispiel, stellen Sie sich vor, dass Ihr Objekt printData japanischen Text enthält. Wenn Leute Ihre Software auf Windows in Japan und den USA ausführen, erhalten sie unterschiedliche Daten, die in die Datei geschrieben werden. US-Benutzer haben wahrscheinlich Fragezeichen (?) anstelle aller Hieroglyphen, während japanische Benutzer möglicherweise UTF-8-Dateien mit originalen japanischen Zeichen haben. Wenn der ursprüngliche Text mehrere Sprachen enthält, werden die Ergebnisse noch unvorhersehbarer sein.

Das kann für Ihre Anwendung akzeptabel sein oder auch nicht, abhängig davon, was sie tut und woher die Daten kommen. Darum geht es bei der Warnung.

Wenn Sie die Dateicodierung kennen, die Ihre Anwendung erstellen soll, sollten Sie sie möglicherweise explizit auswählen, wenn Sie OutputStreamWriter konstruieren. Andererseits, wenn Sie möchten, dass sie in die Standarddarstellung der Maschine übersetzt wird, lassen Sie sie so wie sie ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X