java.nio.charset.Charset.forName ("utf8"). Decode декодирует последовательность байтов
ED A0 80 ED B0 80
в кодовую точку Unicode:
U+10000
java.nio.charset.Charset.forName ("utf8"). Decode также декодирует последовательность байтов
F0 90 80 80
в кодовую точку Unicode:
U+10000
Это подтверждается кодом ниже .
Теперь, похоже, это говорит мне о том, что схема кодирования UTF-8 будет декодировать ED A0 80 ED B0 80
и F0 90 80 80
в одну и ту жекодовая точка Unicode.
Однако, если я захожу на https://www.google.com/search?query=%ED%A0%80%ED%B0%80,
, я вижу, что он явно отличается от страницы https://www.google.com/search?query=%F0%90%80%80
, поскольку поиск Google использует UTF-8 схема кодирования (поправьте меня, если я ошибаюсь),
Это говорит о том, что UTF-8 не декодирует ED A0 80 ED B0 80
и F0 90 80 80
в одну и ту же кодовую точку (ы) Unicode.
Так что в принципе мне было интересно, по официальному стандарту , должен ли UTF-8 декодировать ED A0 80 ED B0 80
последовательность байтов в кодовую точку Unicode U + 10000?
Код :
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)));
}
}
}