Ajout d'informations supplémentaires aux réponses ci-dessus à partir de ce post.
Testé en Java-12, devrait fonctionner dans toutes les versions Java supérieures à 5.
Comme mentionné ici: https://stackoverflow.com/a/47505451/2987755 ,
quel que soit le caractère (dont Unicode est au-dessus de U + FFFF) est représenté comme une paire de substitution, que Java stocke comme une paire de valeurs de caractères, c'est-à-dire l'unique Unicode Le caractère est représenté par deux caractères Java adjacents.
Comme nous pouvons le voir dans l'exemple suivant.
1. Longueur:
"🌉".length() //2, Expectations was it should return 1
"🌉".codePointCount(0,"🌉".length()) //1, To get the number of Unicode characters in a Java String
2. Égalité:
Représentez "🌉" en chaîne en utilisant Unicode \ud83c\udf09comme ci-dessous et vérifiez l'égalité.
"🌉".equals("\ud83c\udf09") // true
Java ne prend pas en charge UTF-32
"🌉".equals("\u1F309") // false
3. Vous pouvez convertir le caractère Unicode en chaîne Java
"🌉".equals(new String(Character.toChars(0x0001F309))) //true
4. String.substring () ne prend pas en compte les caractères supplémentaires
"🌉🌐".substring(0,1) //"?"
"🌉🌐".substring(0,2) //"🌉"
"🌉🌐".substring(0,4) //"🌉🌐"
Pour résoudre ce problème, nous pouvons utiliser String.offsetByCodePoints(int index, int codePointOffset)
"🌉🌐".substring(0,"🌉🌐".offsetByCodePoints(0,1) // "🌉"
"🌉🌐".substring(2,"🌉🌐".offsetByCodePoints(1,2)) // "🌐"
5. Faire Itère Unicode avec BreakIterator
6. Tri des chaînes avec Unicode java.text.Collator
7. de caractère toUpperCase(), les toLowerCase()méthodes ne doivent pas être utilisés, à la place, en majuscules l' utilisation de chaînes et minuscules des paramètres régionaux spécifiques.
8. Character.isLetter(char ch)ne prend pas en charge, mieux utilisé Character.isLetter(int codePoint), pour chaque methodName(char ch)méthode de la classe Character dont le type methodName(int codePoint)peut gérer les caractères supplémentaires.
9. Indiquez charset dans String.getBytes(), la conversion d'octets à cordes InputStreamReader,OutputStreamWriter
Réf:
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
Plus d'informations sur l'exemple image1 image2
Autres termes à explorer: Normalisation , BiDi