한 줄 요약 : Binary Data를 Text로 변경하는 Encoding
import base 64
str = "Yejiapsa"
str_bytes = str.encode('ascii')
str_base64 = base64.b64encode(str_bytes)
str_base64_decoded = str_base64.decode('ascii')
base64_encoded_str = "TGlmZSBpdHNlbGYgaXMgYSBxdW90YXRpb24u"
base64_bytes_str = base64.b64decode(base64_encoded_str)
str = base64_bytes_str.decode('ascii')
SWEA 문제를 풀다가 문제를 이해할 수 없어서 Base64의 개념에 대해 찾다가 알게되었다. Base64의 개념이 모호했다면 문제를 통해 직접 감을 잡아보는 것도 좋을 것 같다.
import sys
sys.stdin = open("input.txt", "r")
import base64
T = int(input())
for t in range(1, T+1):
encoded_str = input()
str_bytes = base64.b64decode(encoded_str)
decoded_str = str_bytes.decode('ascii')
print("#{} {}".format(t, decoded_str))
이 개념을 접하고 얼마 지나지 않아 프로젝트에서 사용할 기회가 있었다.
바로 네이버 OCR API를 이용하면서 이미지를 base64 encoding하여 보내줘야했다!
const OCRdata = {
images: [
{
format: fileFormat,
name: Date.now().toString(),
data: fileBase64,
},
],
requestId: uuidv4(),
version: 'V2',
timestamp: Date.now().toString(),
};
OCRdata에서 fileBase64에 담겨있는 것이 이미지를 숫자로 인코딩한 값이다!
// 이미지 -> base64 인코딩
const handleChangeFile = async (event) => {
const reader = new FileReader();
setFileImage(URL.createObjectURL(event.target.files[0])); // 이미지 미리보기
// 2. 읽기 완료 후 base64 문자열만 분리
reader.onloadend = () => {
const base64 = reader.result;
if (base64) {
const dataType = reader.result.split(';base64,')[0];
setFileFormat(dataType.split('/')[1]); // 데이터 타입 저장
const base64result = base64.split(',')[1]; // 불필요한 데이터 "," 기준 삭제
setFileBase64(base64result);
}
};
if (event.target.files[0]) {
reader.readAsDataURL(event.target.files[0]); // 1. 파일 읽어서 저장
setFile(event.target.files[0]); // 이미지 저장 (form-data로 보낼 것)
}
};
코드가 쪼오금 복잡하지만, 절차 자체는 간단했다.
이미지 파일을 문자열로 변환시키고, 그 값을 저장한다!