2012-04-27 19 views
41

estoy consiguiendo abajo bug de FindBugs,dependencia Encontrado en codificación predeterminada

dependencia Encontrado en codificación predeterminada en MyClass.print (String): String.getBytes()

Método

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

Háganme saber ¿cuál es el error? ¿Cómo podemos resolver esto?

Gracias de antemano

+0

debe aceptar la siguiente respuesta como la marca de verificación verde. –

Respuesta

71

Hay diferentes formas de codificar una cadena como bytes - el juego de caracteres que determina la codificación. Si no especifica un juego de caracteres, como en su llamada a str.getBytes(), usa el sistema predeterminado.

FindBugs le advierte acerca de esto porque debe pensar en qué codificación desea utilizar para su salida. Si está escribiendo en un archivo, ¿qué esperan los lectores de ese archivo? Es más seguro si puede especificar una codificación explícita para el archivo para que no lo escriba de una manera y lo lea de otra manera.

Para especificar un juego de caracteres explícito, use str.getBytes(Charset.forName("UTF-8")), por ejemplo. UTF-8 es una buena opción porque siempre es compatible y puede codificar cualquier carácter.

Por ejemplo, los archivos .properties son siempre ISO 8859-1 (es decir, Latin-1). Eso está documentado, por lo que no hay ambigüedad en cuanto a qué codificación usar.

+9

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

+0

Si tiene el caso opuesto (bytes -> cadena, no cadena -> bytes), use 'new String (bytes, StandardCharsets.UTF_8);' en lugar de ' nueva cadena (bytes); ' –

Cuestiones relacionadas