Добавление дополнительной информации к ответам выше от this post
Протестировано в java-12, должно работать во всех версиях java выше 5.
Как упомянуто здесь: https://stackoverflow.com/a/47505451/2987755,
любой символ (чей Unicode выше U + FFFF) представлен как суррогатная пара, которую Java хранит в виде пары значений char, т.е. один символ Unicode представляется как два соседних символа java.
Как мы можем видеть в следующем примере.
1. Длина:
"?".length() //2, Expectations was it should return 1
"?".codePointCount(0,"?".length()) //1, To get number of Unicode character in Java String
2.Равенство:
Представьте «?» в строку, используя Unicode \ud83c\udf09
, как показано ниже, и проверьте равенство.
"?".equals("\ud83c\udf09") // true
Java не поддерживает UTF-32
"?".equals("\u1F309") // false
3.Вы можете преобразовать символ Unicode в строку Java
"?".equals(new String(Character.toChars(0x0001F309))) //true
4.String.substring () не учитывает дополнительные символы
"??".substring(0,1) //"?"
"??".substring(0,2) //"?"
"??".substring(0,4) //"??"
. Для решения этой проблемы мы можем использовать String.offsetByCodePoints(int index, int codePointOffset)
"??".substring(0,"??".offsetByCodePoints(0,1) // "?"
"??".substring(2,"??".offsetByCodePoints(1,2)) // "?"
5.Итерация строки Unicode с BreakIterator
6. Сортировка строк с Unicode java.text.Collator
7. Символы toUppercase, нижний регистр не должны использоваться, вместо этого используйте строчные буквы верхнего регистраи строчные буквы конкретной локали
8. Character.isLetter(char ch)
не поддерживает, лучше использовать Character.isLetter(int codePoint)
, для каждого метода methodName(char ch)
в классе Character будет тип methodName(int codePoint)
, который может обрабатывать дополнительные символы.
9. Укажите кодировку в String.getBytes()
, переводя из байтов в строку, InputStreamReader
, OutputStreamWriter
Ref:
https://coolsymbol.com/emojis/emoji-for-copy-and-paste.html#objects
https://www.online -toolz.com /tools / text-unicode-entity-convertor.php
https://www.ibm.com/developerworks/library/j-unicode/index.html
https://www.oracle.com/technetwork/articles/javaee/supplementary-142654.html
Подробнее о примере image1 image2
Другие термины, которые стоит изучить: Нормализация , BiDi