Что такое суррогатные символы в UTF-8?
Это почти как вопрос с подвохом.
Приблизительный ответ # 1: 4 байта (если они спарены и закодированы в UTF-8).
Приблизительный ответ № 2: Неверно (если не спарено).
Примерный ответ № 3: Это не UTF-8;Это Модифицированный UTF-8 .
Краткое содержание: этот термин не относится к UTF-8.
У кодовых точек Unicode есть диапазон, который требует 21 бит данных.
Единицы кода UTF-16 - 16 бит.UTF-16 кодирует некоторые диапазоны кодовых точек Unicode как одну кодовую единицу, а другие - как пары двух кодовых единиц, первая из «высокого» диапазона, вторая из «низкого» диапазона.Юникод резервирует недопустимые кодовые точки, которые соответствуют диапазонам пар высокого и низкого уровня.Их иногда называют суррогатами, но они не персонажи.Они ничего не значат сами по себе.
Единицы кода UTF-8 - 8 бит.UTF-8 кодирует несколько различных диапазонов кодовых точек в одной-четырех кодовых единицах соответственно.
# 1 Случается, что кодовые точки, которые UTF-16 кодирует двумя 16-битными кодовыми единицами, UTF-8 кодируют 4 8-битными кодовыми единицами, и наоборот.
# 2Вы можете применить алгоритм кодирования UTF-8 к недопустимым кодовым точкам, что недопустимо.Они не могут быть декодированы до правильной кодовой точки.Совместимый читатель выдает исключение или выбрасывает байты и вставляет символ замены (�).
# 3 Java обеспечивает способ реализации функций во внешнем коде с помощью системы, называемой JNI.Java String API обеспечивает доступ к String и char в виде единиц кода UTF-16.В некоторых местах в JNI, предположительно для удобства, строковые значения модифицированы UTF-8 .Модифицированный UTF-8 - это алгоритм кодирования UTF-8, применяемый к кодовым единицам UTF-16 вместо кодовых точек Unicode.
Несмотря на это, основное правило кодировки символов заключается в чтении с кодировкой, которая использовалась для записи.Если любая последовательность байтов должна рассматриваться как текст, вы должны знать кодировку;В противном случае вы потеряете данные.