Base64는 바이너리 데이터를 텍스트로 저장하는 훌륭한 방법입니다. 원래 데이터보다 33 % 더 많은 문자/바이트를 사용하며 주로 0-9
, a-z
및 A-Z
을 사용합니다. 또한 URL에 인코딩하기 위해 인코딩해야하는 세 가지 다른 문자가 있습니다 (/
, =
및 +
). URL 인코딩을 사용했다면 크기가 300 % (3x)가됩니다.
URL 단편에 문자를 저장하는 경우 base64로 인코딩 된 텍스트는 다시 인코딩 할 필요가 없으므로 변경되지 않습니다. 그러나 실제 URL의 일부로 데이터를 보내려면 방문하는 것이 중요합니다.
lxg에서 참조한 것처럼 거기에는 base64url 변형이 있습니다. 안전하지 않은 문자를 대체하여 URL에 저장하는 base64의 수정 된 버전입니다.
function tobase64url(s) {
return btoa(x).replace(/\+/g,'-').replace(/\//g,'_').replace(/=/g,'');
}
console.log(tobase64url('\x00\xff\xff\xf1\xf1\xf1\xff\xff\xfe'));
// Returns "AP__8fHx___-" instead of "AP//8fHx///+"
을 그리고 URL에서 base64로 문자열을 디코딩 : 당신은`=`패딩을 제거하기보다는 대체 왜
function frombase64url(s) {
return atob(x.replace(/-/g,'+').replace(/_/g, '/'));
}
내가 물어 여기를 인코딩하는 방법은?'atob' 함수가 패딩 문자없이 문자열을 올바르게 디코딩 할 수 있다는 것을 알고 계십니까? – jl6
@ jl6 base64의 패딩은 문자가없는 것을 나타냅니다. 3 문자마다 base64의 4 문자로 인코딩되기 때문입니다. Firefox에서 'btoa'함수는 다른 브라우저를 검사하지는 않았지만이를 사용하지 않고 디코드 할 수 있습니다. 하지만 URL에는 한 줄만 있으므로 패딩은 끝 부분에서만 발생하므로 모든 브라우저가 알아낼 수 있어야합니다. 해독하기 전에 다시 추가되었는지 확인하려면'4 * Math.ceil (s.length/4) -s.length' = 끝에 공백을 추가하십시오. 어쨌든 URL에서 쿼리 문자열에 등호가 사용 되었기 때문에이를 생략하는 이유가 있습니다. – Pluto