Добавление дополнительной информации к ответам выше из этого поста.
Протестировано в 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 the number of Unicode characters in a 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()
, toLowerCase()
методы не должны использоваться, вместо этого, используйте строку в верхний регистр и нижний регистр в конкретной местности.
8. Character.isLetter(char ch)
не поддерживает, лучше использует Character.isLetter(int codePoint)
, для каждого methodName(char ch)
метода в классе Character будет тип, methodName(int codePoint)
который может обрабатывать дополнительные символы.
9. Укажите кодировку String.getBytes()
, преобразуя из байтов в строку InputStreamReader
,OutputStreamWriter
Ссылка:
https://coolsymbol.com/emojis/emoji-for-copy-and-paste.html#objects
https://www.online-toolz.com/tools/text-unicode-entities-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