Go 언어 unicode/utf8 알아보기

오늘은 Go 언어 기본 패키지에 포함되있는 unicode/utf8을 이용하여 실습해보려 합니다.

utf8 인코딩으로 유니코드를 표현할 수 있습니다.

package main

import (
	"fmt"
	"unicode/utf8"
)

unicode/utf8 패키지로 utf8로 인코딩과 디코딩을 하기 위해 가져옵니다.

fmt 패키지로 문자열을 출력하기 위해 가져옵니다.

func main() {
	rInt := '한'
	byteBuffer := make([]byte, 3)

한글이 3바이트이기 때문에 바이트 배열로 3칸을 할당해줍니다.

	n := utf8.EncodeRune(byteBuffer, rInt)
	fmt.Println(byteBuffer)
	fmt.Println(n)

할당한 바이트 배열에 값을 인코딩하여 넣으면 바이트 수가 반환됩니다.

	r, size := utf8.DecodeRune(byteBuffer)
	fmt.Printf("%c %v\n", r, size)

디코드하여 문자로 다시 출력할 수 있습니다.

	fmt.Println("bytes =", len(byteBuffer))
	fmt.Println("runes =", utf8.RuneCount(byteBuffer))

바이트의 크기랑 Rune의 크기를 출력할 수 있습니다.

	fmt.Println(utf8.RuneLen('a'))
	fmt.Println(utf8.RuneLen('한'))

영단어와 한글의 바이트 크기를 비교할 수 있습니다.

	valid := []byte("Hello, 고 언어")
	fmt.Println(utf8.Valid(valid))
	validRune := 'a'
	fmt.Println(utf8.ValidRune(validRune))
	validString := "Hello, 고"
	fmt.Println(utf8.ValidString(validString))
}

유효한 UTF-8 인코딩인지 판단해줍니다.

2018년 11월 8일 기준으로 일부 오타를 수정합니다.

Written on November 6, 2018