Нормализация необходима после складывания корпуса

Учитывая нормализованную строку 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) не меняет регистр символов с прописных на строчные или наоборот. Это не отвечает на ваш первый вопрос.

Это не говорит о том, нужно ли снова делать каноническую нормализацию после свертывания дела.

Другие вопросы по тегам