code point 및 code unit

1614 단어 문서
code point 일부 지역에서 중국어로 코드점이나 코드점으로 번역하기;code unit 일부 지역에서 중국어로 코드 단원으로 번역하기;정확한지 아닌지 모르겠지만 개인적인 느낌은 좀 부적절한 것 같으니 본문에서 그냥 영문명으로 하자.
코드 포인트/코드 포지션, 문자 집합 인코딩은 모든 문자 (character) 가 지정한 유일한 정수 (integer) 입니다.문자 인코딩 ASCII는 128개의 코드 포인트를 포함하고 범위는 0x00~0x7F이다.Extended ASCII는 256개의 코드 포인트를 포함하고 범위는 0x00~0xFF이다.유니코드는 1114112개의 코드 포인트 범위가 0x000000~0x10FFF입니다.
유니코드 코드 유닛은 특정 유니코드 문자의 인코딩 비트(bit size)입니다.예를 들어 UTF-8의 코드 유닛은 8비트(8bits)입니다.UTF-16의 코드 유닛은 16비트입니다.UTF-32의 코드 유닛은 32비트입니다.
인코딩에 따라 문자 (character) 를 표시하기 위해서는 코드 유닛이 하나 이상 필요할 수 있습니다.UTF-16 인코딩 코드 유닛의 크기는 16비트입니다.16비트가 표시할 수 있는 코드 포인트의 개수는 0xFFF+1(Basic Multilingual Plane, 기본 다문종 평면)이고 이 범위는 세계에서 자주 사용하는 문자를 포괄한다)이다.코드포인트가 BMP 범위를 초과하는 문자를 나타내기 위해 UTF-16 인코딩은 프록시 쌍(surrogate pair)을 사용합니다.UTF-16 인코딩에서는 BMP를 초과하는 모든 code point의 문자는 16비트 code unit 2개로 표시됩니다.따라서 UTF-16 인코딩의 일부 문자는 두 개의 코드 unit가 필요할 수 있으며 16자리 코드 unit는 문자의 길이를 정확하게 나타낼 수 없습니다.
Java JVM의 String 클래스는 UTF-16을 사용하여 인코딩됩니다.Java의 String.length()는 문자열의 code unit 수를 반환합니다.JDK 1.5부터 String을 사용할 수 있습니다.코드PointCount (int begin Index, int end Index) 는 문자의 개수를 가져옵니다. 에이전트를 문자로 마주칩니다.
코드를 하나 봅시다.
public class StringTest {
    public static void main(String[] args) {
        String s = "\u0041\u00DF\u6771\uD801\uDC00";
        System.out.println("length:" + s.length());
        System.out.println("codePointCount:" + s.codePointCount(0, s.length()));
    }
}

코드 실행 결과:
length:5
codePointCount:4

알겠습니다. 스트링.length() 및 String.codePointCount(int beginIndex, int endIndex)의 기능은 왜 이런 결과가 나왔는지 알 수 있을 것이다.

좋은 웹페이지 즐겨찾기