[GO] #3-6. 패키지 탐방 (unicode, unicode/[utf16 | utf8])

Study·2021년 5월 26일
0

고랭

목록 보기
13/18
post-thumbnail

unicode

unicode 패키지는 유니코드 포인트의 일부 속성을 테스트하기위한 데이터와 함수를 제공한다.

상수

const (
    MaxRune         = '\U0010FFFF' // 최대 유니코드 포인트
    ReplacementChar = '\uFFFD'     // 유효하지 않은 코드 포인트
    MaxASCII        = '\u007F'     // 최대 아스키 값
    MaxLatin1       = '\u00FF'     // 최대 라틴-1 값
)

케이스 매핑을 위해 CaseRanges 내부의 델타 배열에 대한 인덱스

const (
    UpperCase = iota
    LowerCase
    TitleCase
    MaxCase
)

CaseRange 의 델타 필드가 UpperLower 이면 이 CaseRangeUpper Lower 형식의 시퀀스를 나타낸다.

const (
	UpperLower = MaxRune + 1	// 유효한 델타가 될 수 없다.
)

버전은 테이블이 파생된 유니코드 버전이다.

const version = "13.0.0"

변수

*RangeTable 타입을 가지고 있는, 각각의 범주에 대한 유니코드 문자 집합인 변수들을 가지고 있다.

함수

func In(r rune, ranges ... *RangeTable) bool

룬이 범위 중에서 하나의 구성원인지 여부를 반환한다.

func Is(rangeTab *RangeTable, r rune) bool

룬이 지정된 범위 테이블에 있는지 여부를 반환한다.

func IsControl(r rune) bool
func IsDigit(r rune) bool
func IsGraphic(r rune) bool
func IsLetter(r rune) bool
func IsLower(r rune) bool
func IsMark(r rune) bool
func IsNumber(r rune) bool
func IsOneOf(r rune) bool
func IsPrint(r rune) bool
func IsPunct(r rune) bool
func IsSpace(r rune) bool
func IsSymbol(r rune) bool
func IsTitle(r rune) bool
func IsUpper(r rune) bool

룬이 각각의 키워드에 해당되는지 여부를 반환한다.

func SimpleFold(r rune) rune

유니 코드 정의 단순 대소문자에 해당하는 유니코드 포인트를 반환한다.

룬에 해당하는 코드 포인트 중 가장 작은 룬 > r 또는 가장 작은 룬 >= 0 을 반환한다.

r 이 유효한 유니코드 포인트가 아닌 경우 r 을 반환한다.

예시)

SimpleFold('A') = 'a'
SimpleFold('a') = 'A'

SimpleFold('K') = 'k'
SimpleFold('k') = '\u212A' (Kelvin symbol, K)
SimpleFold('\u212A') = 'K'

SimpleFold('1') = '1'

SimpleFold(-2) = -2

func To(_case int, r rune) rune
func ToLower(r rune) rune
func ToTitle(r rune) rune
func ToUpper(r rune) rune

룬을 각각의 키워드에 해당되도록 매핑한다.

타입

CaseRange

간단한 케이스 변환을 위한 유니코드 포인트 범위를 나타낸다.

범위는 Lo 에서 Hi 까지 포함되며 고정 간격은 1 이다.

델타는 해당 문자의 다른 경우에 대한 코드 포인트에 도달하기 위해 코드 포인트에 추가할 숫자이다.

type CaseRange struct {
    Lo    uint32
    Hi    uint32
    Delta d
}

Range16

16 비트 유니코드 포인트의 범위를 나타낸다.

범위는 Lo 에서 Hi 까지며 지정된 간격이 있다.

type Range16 struct {
	Lo	unit32
    Hide 	unit32
    stride	unit32
}

Range32

16 비트 유니코드 포인트의 범위를 나타낸다.

범위는 Lo 에서 Hi 까지며 지정된 간격이 있다.

type Range16 struct {
	Lo	unit32
    Hide 	unit32
    stride	unit32
}

RangeTable

세트 내의 코드 포인트 범위를 나영하여 유니코드 포인트 세트를 정의한다.

밤위 공간을 정렬하기 위해 16 비트 범위 슬라이스 조각과 32 비트 범위 슬라이스의 두 슬라이스로 나열된다.

두 슬라이스는 정렬된 순서로 겹치지 않아야 한다.

type RangeTable struct {
    R16 [] Range16
    R32 [] Range32
    LatinOffset int  // Hi <= MaxLatin1 인 R16의 항목 수; Go 1.1에 추가됨
}

SpecialCase

언어별 대소문자 매핑을 나타낸다.

type SpecialCase []CaseRange

func (special SepcialCase) ToLower(r rune) rune

룬을 소문자로 매핑하여 특수 매핑에 우선 순위를 부여한다.

func (special SpecialCase) ToTitle(r rune) rune

룬을 제목 케이스에 매핑하여 특수 매핑에 우선순위를 부여한다.

func (special SpecialCase) ToUpper(r rune) rune

룬을 대문자로 매핑하여 특수 매핑에 우선순위를 부여한다.

하위 패키지

utf16

utf16 은 UTF-16 시퀀스의 인코딩 및 디코딩을 구현한다.

func Decode(s []uint16) []rune

UTF-16 인코딩으로 표현되는 유니코드 포인트 시퀀스를 반환한다.

func DecodeRune(r1, r2 rune) rune

서로 게이트 쌍의 UTF-16 디코딩을 반환한다.

쌍이 유효한 UTF-16 서로 게이트 쌍이 아닌 경우 유니코드 대체 코드 포인트 U+FFFD 를 반환한다.

func Encode(s []rune) []uint16

유니코드 포인트 시퀀스의 UTF-16 인코딩을 반환한다.

func EncodeRune(r rune) (r1, r2 rune)

주어진 룬에 대해 UTF-16 서로 게이트 쌍 r1, r2 를 반환한다.

룬이 유효한 유니코드 포인트가 아니거나 인코딩이 필요하지 않은 경우 EncodeRuneU+FFFD, U+FFFD 를 반환한다.

func IsSurrogate(r rune) bool)

지정된 유니코드 포인트가 서로 게이트 쌍에 나타날 수 있는지 여부를 반환한다.

utf8

utf8 은 UTF-8 로 인코딩된 텍스트를 지원하는 지원하는 함수와 상수를 구현한다.

룬과 UTF-8 바이트 시퀀스 사이를 번역하는 함수가 포함되어 있다.

상수

인코딩의 기본 숫자들을 포함하고 있다.

const (
    RuneError = '\uFFFD'     // 오류 룬 또는 유니코드 대체 문자
    RuneSelf  = 0x80         // RuneSelf 아해의 문자는 싱글 바이트로 표시된다.
    MaxRune   = '\U0010FFFF' // 유니코드 포인트의 맥시멈
    UTFMax    = 4            // UTF-8 인코딩 유니코드 문자의 최대 바이트 수
)

함수

func DecodeLastRune(p []byte) (r rune, size int)
func DecodeLastRuneInString(s string) (r rune, size int)
func DecodeRune(p []byte) (r rune, size int)
func DecodeRuneInString(s string) (r rune, size int)

DecodeLastRunep 에서 마지막 UTF-8 인코딩을 풀고 룬과 너비를 바이트 단위로 반환한다.

DecodeLastRuneInStringDecodeLastRune 과 비슷하지만 입력은 문자열이다.

DecodeRunep 에서 첫 번째 UTF-8 인코딩을 풀고 룬과 너비를 바이트 단위로 반환한다.

DecodeRuneInStringDecodeRune 과 비슷하지만 입력은 문자열이다.

위 함수들은 p 가 비어 있으면 (RuneError, 0) 을 반환한다. 그렇지 않고 유효하지 않으면 (RuneError, 1)을 반환한다.

UTF-8 이 올바르지 않거나 범위를 벗어난 룬을 인코딩하거나 값에 대해 가능한 가장 짧은 UTF-8 인코딩이 아닌 경우 인코딩은 유효하지 않다.

다른 유효성 검사는 수행되지 않는다.

func EncodeRune(p []byte, r rune) int

룬의 UTF-8 인코딩을 p 에 기록한다.

룬이 범위를 벗어난 경우 RuneError 의 인코딩을 작성한다.

쓴 바이트 수를 반환한다.

func FullRune(p []byte) bool
func FullRuneInString(s string) bool

FullRunep 의 바이트가 룬의 전체 UTF-8 인코딩으로 시작하는지 여부를 보고한다.

잘못된 인코딩은 너비 -1 오류 룬으로 반환되므로 전체 룬으로 간주된다.

FullRuneInStringFullRune 과 비슷하지만 입력은 문자열이다.

func RuneCount(p []byte) int
func RuneCountInString(s string) int

RuneCountp 의 룬 수를 반환한다.

잘못된 짧은 인코딩은 너비가 1 바이트인 단일 룬으로 처리된다.

RuneCountInStringRuneCount 와 비슷하지만 입력은 문자열이다.

func RuneLen (r rune) int
func RuneStart(b byte) bool

RuneLen 은 룬을 인코딩하는데 필요한 바이트 수를 반환한다.

룬이 UTF-8 로 인코딩하기에 유효한 값이 아니면 -1 을 반환한다.

RuneStart 는 해당 바이트가 인코딩된, 유효하지 않은 룬의 첫 번째 바이트일 수 있는지 여부를 보고한다.

두 번째 및 후속 바이트는 항상 상위 2 비트가 10 으로 설정된다.

func Valid(p []byte) bool
func ValidRune(r rune) bool
func ValidString(s string) bool

Validp 가 유효한 UTF-8 로 인코딩된 룬으로 완전히 구성됐는지 여부를 반환한다.

ValidRuner 이 합법적으로 UTF-8 로 인코딩될 수 있는지 여부를 반환한다.

범위를 벗어난 포인트 또는 절반은 합법적이지 않다.

ValidStrings 가 유효한 UTF-8 로 인코딩된 룬으로 구성되었는지 여부를 반환한다.

profile
Study

0개의 댓글