У меня есть экземпляр java.lang.CharSequence
. Мне нужно определить, является ли этот экземпляр последовательностью Unicode scalar values (то есть, является ли экземпляр в форме кодирования UTF-16). Несмотря на заверения java.lang.String
, строка Java не обязательно должна быть в форме кодировки UTF-16 (по крайней мере, не в соответствии с последним Unicode specification, в настоящее время 6.2), так как она может содержать изолированные surrogate code units. (Строка Java является, однако, Unicode 16-bit string.)Как проверить, является ли экземпляр CharSequence последовательностью скалярных значений Unicode?
Есть несколько очевидных путей, чтобы идти по этому поводу, в том числе:
- итерации по code points последовательностям, явно проверок каждому как Unicode скалярное значение.
- Используйте регулярное выражение для поиска изолированных суррогатных кодовых точек.
- Проведите последовательность символов через character-set encoder, что reports encoding errors.
Кажется, что-то вроде этого уже существует как библиотечная функция. Я просто не могу найти его в стандартном API. Я пропустил его, или мне нужно его реализовать?
Существует а [isValidCodepoint] (http://docs.oracle.com/javase/7/docs/api/java/ lang/Character.html # isValidCodePoint% 28int% 29). Все, что нужно - это дополнительный фильтр для удаления суррогатов. –
@ R.MartinhoFernandes Функция isValidCodePoint определяет, входит ли значение int в диапазон кодовых точек Unicode. Однако диапазон скалярных значений Unicode является ограничением на диапазон кодовых точек Unicode. –
Ну, моя точка зрения в том, что isValidCodepoint - лучшее, что у вас есть. Я считаю, что вам придется получить эту проверку из внешней библиотеки (например, ICU) или сделать это самостоятельно. –