2012-04-27 10 views
41

sto ottenendo qui sotto bug da FindBugs,affidamento Trovato su di default codifica

affidamento Trovato su codifica di default in MyClass.print (String): String.getBytes()

Metodo

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

Per favore fatemi sapere qual è l'errore? come possiamo risolvere questo?

Grazie in anticipo

+0

si dovrebbe accettare la risposta di seguito come il segno di spunta verde. –

risposta

71

Esistono diversi modi di codifica una stringa come byte - charset determina che codifica. Se non si specifica un set di caratteri, come nella chiamata a str.getBytes(), utilizza l'impostazione predefinita di sistema.

FindBugs ti avvisa di questo perché devi pensare a quale codifica vuoi usare per il tuo output. Se stai scrivendo su un file, quali sono i lettori di quel file in attesa? È più sicuro se è possibile specificare una codifica esplicita per il file in modo da non scriverlo in un modo e leggerlo in un altro modo.

Per specificare un set di caratteri esplicito, utilizzare str.getBytes(Charset.forName("UTF-8")), ad esempio. UTF-8 è una buona scelta perché è sempre supportata e può codificare qualsiasi personaggio.

Ad esempio, i file .properties sono sempre ISO 8859-1 (ovvero Latin-1). Questo è documentato quindi non c'è alcuna ambiguità su quale codifica usare.

+9

In alternativa a 'Charset.forName (" UFT-8 ")' Java 7 definisce 'StandardCharsets.UTF_8'. Vedi http://stackoverflow.com/a/16066990/152061 –

+0

Se si ha il caso opposto (byte -> stringa, non stringa -> byte), usare 'new String (byte, StandardCharsets.UTF_8);' invece di ' nuova stringa (byte); ' –

Problemi correlati