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