Bienvenidos sean a este post, hoy hablaremos sobre uno de los metodos para la clase String.
Este metodo permite convertir una cadena en un nuevo array de bytes en base al conjunto de caracteres (charset) informados, en caso de no informar ninguno se utilizar el charset predeterminado del sistema, ante un error el metodo lanza una excepcion del tipo UnsupportedEncodingException, veamos su sintaxis:
variable.getBytes([charset]);
Para entender el concepto vamos a realizar el siguiente ejemplo:
bytes.java
import java.io.*;
public class bytes
{
public static void main(String[] args)
{
String cdn1 = new String("Gran año para estudiar en tinchicus.com");
try
{
String cdn2 = new String(cdn1.getBytes("utf-8"));
System.out.println("Valor devuelto " + cdn2);
cdn2 = new String(cdn1.getBytes("ISO-8859-1"));
System.out.println("Valor devuelto " + cdn2);
cdn2 = new String(cdn1.getBytes());
System.out.println("Valor devuelto " + cdn2);
cdn2 = new String(cdn1.getBytes("tinchicus"));
System.out.println("Valor devuelto " + cdn2);
}
catch ( UnsupportedEncodingException e )
{
System.out.println("Charset no soportado");
}
}
}
En este ejemplo primero importaremos todos los paquetes relacionados a la clase io para poder manejar las excepciones que veremos en el mismo, dentro del main nuestro primer paso sera crear una variable de tipo String donde almacenaremos un texto, es de ejemplo y pueden usar otro, pero lo bueno de este es que podremos ver las diferencias de los charset, luego usaremos un modulo try/catch para capturar la excepcion que nos puede devolver el metodo, si quieren saber mas sobre estos metodos les recomiendo este post, en el bloque del try tenemos a nuestro programa en si, donde crearemos una nueva variable llamada cdn2 tambien de tipo String, en esta crearemos un nuevo objeto donde tomaremos el valor de cdn1 y lo convertiremos por medio del metodo getBytes y le pasamos el charset utf-8, la siguiente linea mostramos el valor actual de cdn2, despues de esto volvemos a modificar el valor de cdn2 pero esta vez usamos el charset ISO-8859-1 para mostrar el nuevo valor obtenido, volvemos a repetir la operacion de cambiar el valor de cdn2 pero esta vez sin pasar un charset para que utilice el predeterminado y por ultimo hacemos lo mismo pero con un charset inexistente, con esto tenemos el bloque del try completo veamos el de catch, observen que le pasamos la excepcion que nos devuelve el metodo y en caso de interceptarla nos mostrara ese mensaje en pantalla, compilemos y veamos su salida:
tinchicus@dbn001vrt:~/lenguajes/java$ java bytes
Valor devuelto Gran año para estudiar en tinchicus.com
Valor devuelto Gran a�o para estudiar en tinchicus.com
Valor devuelto Gran año para estudiar en tinchicus.com
Charset no soportado
tinchicus@dbn001vrt:~/lenguajes/java$
Podemos ver como en la primer salida nos devolvio todo el mensaje correctamente pero en el segundo caso al no contener el caracter para la ñ nos devolvio un signo de interrogacion, en el tercer caso funciono correctamente porque se adecuo al configurado en el sistema y por ultimo la excepcion al pasar un charset inexistente.
En resumen, hoy hemos visto a getBytes, que es, para que sirve, como trabaja, para que se usa, como nos ayuda y un ejemplo simple y practico para verlo en accion, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.00

Te olvidas de que así estar usando el constructor String(bytes[]) sin más argumentos, se está usando el Charset por defecto. Con lo cual, el tercer ejemplo está usando el charset por defecto para generar esos bytes y de nuevo el charset por defecto para generar el String a partir de esos bytes, con lo que queda exactamente lo mismo.
El segundo ejemplo no es que iso-8859-1 no tenga ñ(que si le tiene) si no que la codificación de la ñ en tu Charset por defecto no coincide con la de iso-8859-1.
Y en el primer caso, el hecho de que haya salido correctamente la frase me hace pensar que el charset de tu jvm es utf8.
Me gustaMe gusta