2012-04-27 6 views
41

Ich erhalte unten Fehler von FindBugs,gefunden Vertrauen auf Standard-Kodierung

gefunden Vertrauen auf Standardcodierung in MyClass.print (String): String.getBytes()

Methode

protected void print (String str) { 
{ 
private OutputStream outStream = null; 
..... 
outStream.write(str.getBytes()); 
....... 
} 

Bitte lassen Sie mich wissen, was ist der Fehler? Wie können wir das lösen?

Vielen Dank im Voraus

+0

sollten Sie die folgende Antwort als grünes Häkchen akzeptieren. –

Antwort

71

Es gibt verschiedene Möglichkeiten, einen String als Bytes kodiert - das charset, daß die Codierung bestimmt. Wenn Sie keinen Zeichensatz wie in Ihrem Aufruf von str.getBytes() angeben, wird der Systemstandard verwendet.

FindBugs warnt Sie darüber, weil Sie darüber nachdenken sollten, welche Kodierung Sie für Ihre Ausgabe verwenden möchten. Wenn Sie in eine Datei schreiben, was erwarten die Leser dieser Datei? Am sichersten ist es, wenn Sie eine explizite Kodierung für die Datei angeben können, damit Sie sie nicht auf eine Art schreiben und anders lesen.

Um einen expliziten Zeichensatz anzugeben, verwenden Sie beispielsweise str.getBytes(Charset.forName("UTF-8")). UTF-8 ist eine gute Wahl, da es immer unterstützt wird und jedes Zeichen codieren kann.

Zum Beispiel sind .properties-Dateien immer ISO 8859-1 (d. H. Latin-1). Das ist dokumentiert, daher gibt es keine Unklarheit darüber, welche Codierung zu verwenden ist.

+9

Als Alternative zu 'Charset.forName (" UFT-8 ")' Java 7 definiert 'StandardCharsets.UTF_8'. Siehe http://stackoverflow.com/a/16066990/152061 –

+0

Wenn Sie den umgekehrten Fall haben (Bytes -> String, nicht String -> Bytes), verwenden Sie 'new String (Bytes, StandardCharsets.UTF_8);' statt ' neue Zeichenfolge (Bytes); ' –

Verwandte Themen