Adicionando mais algumas informações às respostas acima deste post.
Testado em Java-12, deve funcionar em todas as versões Java acima de 5.
Conforme mencionado aqui: https://stackoverflow.com/a/47505451/2987755 ,
o caractere (cujo Unicode está acima de U + FFFF) é representado como um par substituto, que Java armazena como um par de valores de caracteres, ou seja, o único Unicode caractere é representado como dois caracteres Java adjacentes.
Como podemos ver no exemplo a seguir.
1. comprimento:
"🌉".length() //2, Expectations was it should return 1
"🌉".codePointCount(0,"🌉".length()) //1, To get the number of Unicode characters in a Java String
2. Igualdade:
represente "🌉" para String usando Unicode \ud83c\udf09como abaixo e verifique a igualdade.
"🌉".equals("\ud83c\udf09") // true
Java não suporta UTF-32
"🌉".equals("\u1F309") // false
3. Você pode converter caracteres Unicode em Java String
"🌉".equals(new String(Character.toChars(0x0001F309))) //true
4. String.substring () não considera caracteres suplementares
"🌉🌐".substring(0,1) //"?"
"🌉🌐".substring(0,2) //"🌉"
"🌉🌐".substring(0,4) //"🌉🌐"
Para resolver isso, podemos usar String.offsetByCodePoints(int index, int codePointOffset)
"🌉🌐".substring(0,"🌉🌐".offsetByCodePoints(0,1) // "🌉"
"🌉🌐".substring(2,"🌉🌐".offsetByCodePoints(1,2)) // "🌐"
5. corda Iterating Unicode com BreakIterator
6. Sorting Cordas com Unicode java.text.Collator
7. do personagem toUpperCase(), toLowerCase(), métodos não deve ser usado, em vez disso, maiúscula uso de Cordas e minúsculas de particular localidade.
8. Character.isLetter(char ch)não suporta, melhor usado Character.isLetter(int codePoint), para cada methodName(char ch)método na classe Caractere, haverá um tipo methodName(int codePoint)que pode manipular caracteres suplementares.
9. Especificar conjunto de caracteres em String.getBytes(), conversão de Bytes para String, InputStreamReader,OutputStreamWriter
Ref:
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
Mais informações sobre o exemplo image1 image2
Outros termos que vale a pena explorar: Normalização , BiDi