Java 8 UTF-16 no es un juego de caracteres predeterminado sino UTF-8

He estado haciendo algo de codificación con String en Java8, Java 11, pero esta pregunta se basa en Java 8. Tengo este pequeño fragmento.

final char e = (char)200;//È

Solo pensé que los caracteres entre 0.255 [Ascii + Ascii extendido] siempre cabrían en un byte solo porque 2 ^ 8 = 256 pero esto no parece ser cierto, lo he intentado en el sitio web https://mothereff.in/byte- contador y afirma que el personaje está tomando 2 bytes, ¿alguien puede explicarme?

Otra pregunta en muchas publicaciones indica que Java es UTF-16 pero en mi máquina que ejecuta Windows 7 está devolviendo UTF-8 en este fragmento.

String csn = Charset.defaultCharset().name();

¿Es esta plataforma dependiente?

Otras preguntas que he probado este fragmento.

final List<Charset>charsets = Arrays.asList(StandardCharsets.ISO_8859_1,StandardCharsets.US_ASCII,StandardCharsets.UTF_16,StandardCharsets.UTF_8);
    charsets.forEach(a->print(a,"È"));
    System.out.println("getBytes");
    System.out.println(Arrays.toString("È".getBytes()));
    charsets.forEach(a->System.out.println(a+" "+Arrays.toString(sb.toString().getBytes(a))));

private void print(final Charset set,final CharSequence sb){
    byte[] array = new byte[4];              
    set.newEncoder()
            .encode(CharBuffer.wrap(sb), ByteBuffer.wrap(array), true);
    final String buildedString = new String(array,set);
    System.out.println(set+" "+Arrays.toString(array)+" "+buildedString+"<<>>"+buildedString.length());    
}

E impresiones

run:
ISO-8859-1 [-56, 0, 0, 0] È//PERFECT USING 1 BYTE WHICH IS -56
US-ASCII [0, 0, 0, 0] //DONT GET IT SEE THIS ITEM FOR LATER
UTF-16 [-2, -1, 0, -56] È<<>>1 //WHAT IS -2,-1 BYTE USED FOR? I HAVE TRY WITH OTHER EXAMPLES AND THEY ALWAYS APPEAR AM I LOSING TWO BYTES HERE??
UTF-8 [-61, -120, 0, 0] 2 È //SEEMS TO MY CHARACTER NEEDS TWO BYTES?? I THOUGHT THAT CODE=200 WOULD REQUIRE ONLY ONE
getBytes
[-61, -120]//OK MY UTF-8 REPRESENTATION
ISO-8859-1 [-56]//OK
US-ASCII [63]//OK BUT WHY WHEN I ENCODE IN ASCCI DOESNT GET ANY BYTE ENCODED?
UTF-16 [-2, -1, 0, -56]//AGAIN WHAT ARE -2,-1 IN THE LEADING BYTES?
UTF-8 [-61, -120]//OK

He intentado

System.out.println(new String(new byte[]{-1,-2},"UTF-16"));//SIMPLE "" I AM WASTING THIS 2 BYTES??

En resumen.

  1. ¿Por qué UTF-16 siempre tiene dos bytes iniciales si se desperdician? nuevo byte [] {- ​​1, -2}

  2. ¿Por qué cuando codifico "È" no obtengo bytes en ASCCI Charset pero cuando obtengo È.getBytes (StandardCharsets.US_ASCII) obtengo {63}?

  3. Java usa UTF-16 pero en mi caso UTF-8 depende de la plataforma?

Lo siento si esta publicación es confusa

Ambiente

Windows 7 64 Bits Netbeans 8.2 with Java 1.8.0_121
Respuesta 1

Estoy creando una aplicación que, entre otras cosas, permite al usuario insertar un texto en un PDF, usando una capa. La posición del texto en la página PDF se puede establecer usando la aplicación, que representa el PDF usando ...

En java spec 17.3 Sleep and Yield 17.3 Sleep and Yield Thread.sleep hace que el hilo que se está ejecutando actualmente se suspenda (cese temporal de la ejecución) durante el tiempo especificado, sujeto al ...

Recientemente cambié el script gwt.xml para compilar solo 1 permutación (es decir, solo 8), esto resuelve mi problema anterior, sin embargo, surge un problema cosmético, que es una ventana emergente molesta que aparece cada vez ...

Estoy tratando de crear una función que compare todos los elementos de una matriz con todos los elementos de una segunda matriz y devolverá todas las coincidencias posibles, y un mensaje si no se encuentran coincidencias. Cuando trato de ...