Нормализация необходима после складывания корпуса
Учитывая нормализованную строку NFC, применяя к этой строке полное сворачивание регистра, могу ли я предположить, что результат также нормализован NFC?
Я не понимаю, что стандарт Unicode пытается сказать мне в этой цитате:
Нормализация также взаимодействует с фальцовкой. Для любой строки X пусть Q(X) = NFC(toCasefold(NFD(X))). Другими словами, Q(X) является результатом нормализации X, затем сворачивает регистр, затем помещает результат в формат NFC формы нормализации. Из-за того, как определены нормализация и сворачивание регистра, Q(Q(X)) = Q(X). Повторное применение Q не меняет результат; сворачивание дела закрывается при канонической нормализации либо для формы нормализации NFC, либо для NFD.
2 ответа
Строка Unicode может отсутствовать в NFC после сворачивания регистра. Примером является U+00DF
(LATIN SMALL LETTER S SHARTER S) с последующим U+0301
(Сочетание острого акцента).
X = U+00DF U+0301
NFC(X) = U+00DF U+0301
toCasefold(NFC(X)) = U+0073 U+0073 U+0301
NFC(toCasefold(NFC(X))) = U+0073 U+015B
Вы задали два вопроса:
Вопрос 1: есть toCasefold(NFC(X))
двоичный равно NFC(toCasefold(NFC(X)))
?
Стандарт не дает явного ответа на этот вопрос. (Я ожидаю, что ответ - да, это свертывание не влияет на нормализацию, но у меня нет никаких доказательств.)
Вопрос 2: Что стандарт Unicode говорит мне в цитате?
В стандарте говорится только о том, что после канонической нормализации нет необходимости снова складывать регистр. Другими словами, каноническая нормализация (в форме NFC или NFD) не меняет регистр символов с прописных на строчные или наоборот. Это не отвечает на ваш первый вопрос.
Это не говорит о том, нужно ли снова делать каноническую нормализацию после свертывания дела.