Dodanie więcej informacji do powyższych odpowiedzi z tego postu.
Testowany w Javie-12, powinien działać we wszystkich wersjach Java powyżej 5.
Jak wspomniano tutaj: https://stackoverflow.com/a/47505451/2987755 ,
którykolwiek znak (którego Unicode jest powyżej U + FFFF) jest reprezentowany jako para zastępcza, którą Java przechowuje jako parę wartości znaków, tj. Pojedynczy Unicode znak jest reprezentowany jako dwa sąsiednie znaki Java.
Jak widać na poniższym przykładzie.
1. Długość:
"🌉".length() //2, Expectations was it should return 1
"🌉".codePointCount(0,"🌉".length()) //1, To get the number of Unicode characters in a Java String
2. Równość:
Przedstaw "🌉" jako łańcuch znaków używając Unicode, \ud83c\udf09
jak poniżej i sprawdź równość.
"🌉".equals("\ud83c\udf09") // true
Java nie obsługuje UTF-32
"🌉".equals("\u1F309") // false
3. Możesz przekonwertować znak Unicode na ciąg Java
"🌉".equals(new String(Character.toChars(0x0001F309))) //true
4. String.substring () nie uwzględnia znaków uzupełniających
"🌉🌐".substring(0,1) //"?"
"🌉🌐".substring(0,2) //"🌉"
"🌉🌐".substring(0,4) //"🌉🌐"
Aby rozwiązać ten problem, możemy użyć String.offsetByCodePoints(int index, int codePointOffset)
"🌉🌐".substring(0,"🌉🌐".offsetByCodePoints(0,1) // "🌉"
"🌉🌐".substring(2,"🌉🌐".offsetByCodePoints(1,2)) // "🌐"
5. Ciąg Iteracja Unicode z BreakIterator
6. Sortowanie Struny z Unicode java.text.Collator
7. bohatera toUpperCase()
, toLowerCase()
nie powinny być stosowane metody, zamiast, wielkie i małe litery użycie String poszczególnych lokalizacji.
8. Character.isLetter(char ch)
nie obsługuje, lepiej wykorzystywanych Character.isLetter(int codePoint)
, dla każdej methodName(char ch)
metody w klasie Character zostanie określony typ, methodName(int codePoint)
który może obsługiwać dodatkowe znaki.
9. Określ zestaw znaków w String.getBytes()
, konwertując z bajtów na łańcuch,InputStreamReader
,OutputStreamWriter
Odniesienie:
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
Więcej informacji na temat przykładu image1 image2
Inne terminy, które warto poznać: Normalizacja , BiDi