바이너리 데이터를 치환하여 아스키코드와 일대일로 매칭 되는 문자열로 만들어주는 인코딩 방식입니다.
그렇게 얻어낸 문자열은 XML, JSON과 같은 문자열 기반 환경에서 유용하게 사용할 수 있습니다.
단, 이렇게 문자열로 치환된 데이터는, 기존의 데이터의 길이보다 약 30%가량 늘어나게 됩니다.
모든 바이너리 데이터가 아스키코드와 매칭 되는 것은 아닙니다.
그것은 곧, 바이너리 데이터를 Base64가 아닌 다른 방식으로 인코딩할 경우, 데이터의 손실이 발생할 수 있다는 것인데요.
Base64 인코딩 시, UTF-8과 호환 가능한 문자열을 얻을 수 있게 됩니다.
제공해주는 예시를 참고하여 간단하게 구현해 볼 수 있습니다.
package main
import (
"encoding/base64"
"fmt"
)
func main() {
data := []byte("any + old & data")
str := base64.StdEncoding.EncodeToString(data)
fmt.Println(str)
}
package main
import (
"encoding/base64"
"fmt"
)
func main() {
str := "c29tZSBkYXRhIHdpdGggACBhbmQg77u/"
data, err := base64.StdEncoding.DecodeString(str)
if err != nil {
fmt.Println("error:", err)
return
}
fmt.Printf("%q\n", data)
}
앞서 언급한 것처럼, Base64 인코딩을 이용하여 문자열로 치환된 데이터는, 기존의 데이터의 길이보다 약 30%가량 늘어나게 됩니다.
때문에, 너무 큰 데이터를 Base64로 처리하는 것은 권장하지 않습니다.
만약 파일 업로드 기능을 구현한다면, HTTP multipart/form-data를 이용하는 것도 고려해봐야 합니다.
Go - 복합 타입 (1) (0) | 2022.11.03 |
---|---|
Go - 기본적인 데이터 타입과 선언 (2) (0) | 2022.11.02 |
Go - 기본적인 데이터 타입과 선언 (1) (0) | 2022.11.01 |
zlib을 이용한 데이터 압축 (0) | 2022.10.09 |
댓글 영역