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