Ответ 1
Эти два массива unicode эквивалент, но представлены различными формами нормализации. Похоже, что Java ToCharArray
(или строковое представление) использует одну форму нормализации, а С# ToCharArray
(или строковое представление) использует другой.
Эта страница содержит диаграмму различных форм нормализации для текста бенгали - четвертая строка описывает то, что вы видите:
Сейчас я только об этом узнаю, но мне кажется, что мотивация для этого заключается в том, что реализации unicode могут оставаться совместимыми с существующими кодировками, где это возможно и практично.
Например, одна ранее существовавшая кодировка могла использовать один символ Юникода, тогда как другая ранее существовавшая кодировка могла вместо этого использовать два символа в сочетании. Таким образом, решение, разрешенное юникодными людьми, должно поддерживать обе, за счет отсутствия единого "канонического" представления, как вы здесь встречались.
Если вы хотите, чтобы ваш Java-массив был нормализован в форме нормализации "D", которую, похоже, использует ваш массив С#, кажется, что this page предоставляет такую функцию. Возможно, вы ищете что-то вроде:
someString = Normalizer.normalize(someString, Normalizer.Form.NFD);
Стандартное приложение Unicode 15 является официальным документом, который описывает эти формы нормализации.