sirve que para millon hace endian ejemplos como codigo codificacion codifica caracteres big aproximadamente java unicode utf-8

que - ¿Cómo encaja Java un carácter Unicode de 3 bytes en un tipo de caracteres?



utf-8 html para que sirve (2)

Entonces, un ''char'' en Java tiene 2 bytes. (Se puede verificar desde aquí )

Tengo este código de muestra:

public class FooBar { public static void main(String[] args) { String foo = "€"; System.out.println(foo.getBytes().length); final char[] chars = foo.toCharArray(); System.out.println(chars[0]); } }

Y el resultado es el siguiente:

3 €

Mi pregunta es, ¿cómo encajó Java un carácter de 3 bytes en un tipo de datos de caracteres? Por cierto, estoy ejecutando la aplicación con el parámetro: -Dfile.encoding = UTF-8

También si edito el código un poco más y agrego las siguientes afirmaciones:

File baz = new File("baz.txt"); final DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream(baz)); dataOutputStream.writeChar(chars[0]); dataOutputStream.flush(); dataOutputStream.close();

el archivo final "baz.txt" solo tendrá 2 bytes, y no mostrará el carácter correcto aunque lo trate como un archivo UTF-8.

Editar 2: si abro el archivo "baz.txt" con la codificación UTF-16 BE, veré el carácter € muy bien en mi editor de texto, lo cual tiene sentido, supongo.


Java usa UTF-16 (16 bits) para la representación en memoria.

Ese símbolo del euro se ajusta a eso, a pesar de que necesita tres bytes en UTF-8.


String.getBytes() devuelve los bytes utilizando la codificación de caracteres predeterminada de la plataforma, que no necesariamente coincide con la representación interna.

Java usa 2 bytes en RAM para cada char, cuando los caracteres se "serializan" usando UTF-8, pueden producir uno, dos o tres bytes en la matriz de bytes resultante, así es como funciona la codificación UTF-8.

Su ejemplo de código está usando UTF-8. Las cadenas Java están codificadas en memoria usando UTF-16 en su lugar. Los puntos de código Unicode que no se ajustan a un único carácter de 16 bits se codificarán utilizando un par de 2 caracteres conocido como par suplente.

Si no pasa un valor de parámetro a String.getBytes (), devuelve una matriz de bytes que tiene el contenido de la cadena codificado utilizando el juego de caracteres predeterminado del sistema operativo subyacente. Si desea asegurar una matriz codificada UTF-8, entonces necesita usar getBytes ("UTF-8").

Llamar a String.charAt () devuelve un carácter original codificado en UTF-16 del almacenamiento en memoria de String solamente.

Verifique este enlace: codificación java utf8 - char, tipos de cadenas