Aggiunta di ulteriori informazioni alle risposte di cui sopra da questo post.
Testato in Java-12, dovrebbe funzionare in tutte le versioni Java sopra la 5.
Come menzionato qui: https://stackoverflow.com/a/47505451/2987755 ,
qualunque personaggio (il cui Unicode è sopra U + FFFF) è rappresentato come coppia surrogata, che Java memorizza come coppia di valori char, ovvero il singolo Unicode il personaggio è rappresentato da due caratteri Java adiacenti.
Come possiamo vedere nel seguente esempio.
1. Lunghezza:
"🌉".length() //2, Expectations was it should return 1
"🌉".codePointCount(0,"🌉".length()) //1, To get the number of Unicode characters in a Java String
2. Uguaglianza:
rappresentare "🌉" in String usando Unicode \ud83c\udf09come di seguito e verificare l'uguaglianza.
"🌉".equals("\ud83c\udf09") // true
Java non supporta UTF-32
"🌉".equals("\u1F309") // false
3. È possibile convertire il carattere Unicode in Java String
"🌉".equals(new String(Character.toChars(0x0001F309))) //true
4. String.substring () non considera i caratteri supplementari
"🌉🌐".substring(0,1) //"?"
"🌉🌐".substring(0,2) //"🌉"
"🌉🌐".substring(0,4) //"🌉🌐"
Per risolvere questo possiamo usare String.offsetByCodePoints(int index, int codePointOffset)
"🌉🌐".substring(0,"🌉🌐".offsetByCodePoints(0,1) // "🌉"
"🌉🌐".substring(2,"🌉🌐".offsetByCodePoints(1,2)) // "🌐"
5. stringa Iterando Unicode con BreakIterator
6. ordinamento delle stringhe con Unicode java.text.Collator
7. del personaggio toUpperCase(), toLowerCase()metodi non devono essere utilizzati, invece, maiuscolo uso String e minuscole di localizzazione particolare.
8. Character.isLetter(char ch)non supporta, meglio usato Character.isLetter(int codePoint), per ogni methodName(char ch)metodo nella classe Character ci sarà un tipo di methodName(int codePoint)che può gestire caratteri supplementari.
9. Specificare charset in String.getBytes(), la conversione da byte a stringa, InputStreamReader,OutputStreamWriter
Rif:
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
Ulteriori informazioni sull'esempio image1 image2
Altri termini che vale la pena esplorare: normalizzazione , BiDi