¿Es ED A0 80 ED B0 80 una secuencia de bytes UTF-8 válida?
java.nio.charset.Charset.forName ("utf8"). decode decodifica una secuencia de bytes de
ED A0 80 ED B0 80
en el punto de código Unicode:
U+10000
java.nio.charset.Charset.forName ("utf8"). decode también decodifica una secuencia de bytes de
F0 90 80 80
en el punto de código Unicode:
U+10000
Esto es verificado porcode debajo de.
Ahora esto parece estar diciéndome que el esquema de codificación UTF-8 decodificaráED A0 80 ED B0 80
yF0 90 80 80
en el mismo punto de código unicode.
Sin embargo, si visitohttps: //www.google.com/search? query =% ED% A0% 80% ED% B0% 80,
Puedo ver que es claramente diferente de la páginahttps: //www.google.com/search? query =% F0% 90% 80% 80
Dado que la Búsqueda de Google está utilizando el esquema de codificación UTF-8 (corrígeme si me equivoco) también,
Esto sugiere que el UTF-8 no decodificaED A0 80 ED B0 80
yF0 90 80 80
en los mismos puntos de código unicode.
Así que básicamente me preguntaba, por eloficia estándar, debe decodificar UTF-8ED A0 80 ED B0 80
secuencia de bytes en el punto de código Unicode U + 10000?
Códig:
public class Test {
public static void main(String args[]) {
java.nio.ByteBuffer bb = java.nio.ByteBuffer.wrap(new byte[] { (byte) 0xED, (byte) 0xA0, (byte) 0x80, (byte) 0xED, (byte) 0xB0, (byte) 0x80 });
java.nio.CharBuffer cb = java.nio.charset.Charset.forName("utf8").decode(bb);
for (int x = 0, xx = cb.limit(); x < xx; ++x) {
System.out.println(Integer.toHexString(cb.get(x)));
}
System.out.println();
bb = java.nio.ByteBuffer.wrap(new byte[] { (byte) 0xF0, (byte) 0x90, (byte) 0x80, (byte) 0x80 });
cb = java.nio.charset.Charset.forName("utf8").decode(bb);
for (int x = 0, xx = cb.limit(); x < xx; ++x) {
System.out.println(Integer.toHexString(cb.get(x)));
}
}
}