Додавання додаткової інформації до вищезазначених відповідей з цієї публікації.
Тестований на Java-12, повинен працювати у всіх версіях Java вище 5.
Як згадувалося тут: https://stackoverflow.com/a/47505451/2987755 ,
залежно від того , який символ (Unicode вище U + FFFF) представлений у вигляді сурогатної пари, яка Java зберігає як пару знакових знаків, тобто єдиний Unicode символ представлений у вигляді двох суміжних символів Java.
Як ми бачимо на наступному прикладі.
1. Довжина:
"🌉".length() //2, Expectations was it should return 1
"🌉".codePointCount(0,"🌉".length()) //1, To get the number of Unicode characters in a Java String
2. Рівність:
представляйте "🌉" для String за допомогою Unicode, \ud83c\udf09
як показано нижче, і перевірте рівність.
"🌉".equals("\ud83c\udf09") // true
Java не підтримує UTF-32
"🌉".equals("\u1F309") // false
3. Можна перетворити символ Unicode в Java String
"🌉".equals(new String(Character.toChars(0x0001F309))) //true
4. String.substring () не враховує додаткових символів
"🌉🌐".substring(0,1) //"?"
"🌉🌐".substring(0,2) //"🌉"
"🌉🌐".substring(0,4) //"🌉🌐"
Для вирішення цього питання ми можемо використовувати String.offsetByCodePoints(int index, int codePointOffset)
"🌉🌐".substring(0,"🌉🌐".offsetByCodePoints(0,1) // "🌉"
"🌉🌐".substring(2,"🌉🌐".offsetByCodePoints(1,2)) // "🌐"
5. Рядок Ітерація Unicode з BreakIterator
6. Сортування рядків з Unicode java.text.Collator
7. персонажа toUpperCase()
, toLowerCase()
методи не повинні використовуватися, замість цього, використовуйте рядок в верхній регістр і нижній регістр в конкретній місцевості.
8. Character.isLetter(char ch)
не підтримує, краще використовувати Character.isLetter(int codePoint)
, для кожного methodName(char ch)
методу в класі символів буде тип, methodName(int codePoint)
який може обробляти додаткові символи.
9. Вкажіть кодування в String.getBytes()
, перетворення з байтів в рядок, InputStreamReader
,OutputStreamWriter
Посилання:
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/supplementar-142654.html
Більше інформації про приклад image1 image2
Інші терміни, які варто вивчити: Нормалізація , BiDi