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\udf09
como 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