이 게시물 의 위 답변에 더 많은 정보를 추가하십시오 .
Java-12에서 테스트되었으며 5 이상의 모든 Java 버전에서 작동합니다.
여기에 언급 된 바와 같이 : https://stackoverflow.com/a/47505451/2987755 ,
어느 문자 (유니 코드가 U + FFFF보다 높음)는 대리 쌍으로 표시되며 Java는 문자 값 쌍, 즉 단일 유니 코드로 저장됩니다. 문자는 두 개의 인접한 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. 평등 : 아래와 같이
유니 코드 \ud83c\udf09
를 사용하여 "🌉"를 문자열로 나타내고 평등을 확인하십시오.
"🌉".equals("\ud83c\udf09") // true
Java는 UTF-32를 지원하지 않습니다
"🌉".equals("\u1F309") // false
3. 유니 코드 문자를 Java 문자열로 변환 할 수 있습니다
"🌉".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. 순회 유니 코드 문자열 의 BreakIterator
유니 코드 6. 정렬 문자열 java.text.Collator
7. 문자의 toUpperCase()
, toLowerCase()
, 방법은 사용하지 말아야 대신 사용하는 문자열 대문자와 특정 로케일의 소문자.
8. Character 클래스의 각 메소드에 대해 Character.isLetter(char ch)
더 나은 사용법을 지원하지 않으므로 보충 문자를 처리 할 수 있는 유형 이 있습니다.
의 캐릭터 세트를 지정 9. 문자열을 바이트로 변환,, ,Character.isLetter(int codePoint)
methodName(char ch)
methodName(int codePoint)
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/supplementary-142654.html
예제 image1 image2 에 대한 추가 정보
탐색해야 할 다른 용어 : Normalization , BiDi