为什么 escape 可以使 btoa 正确处理 UTF-8 编码的字符串?
浏览器在 window 上提供了 atob
和 btoa
两个 API 用于处理 base64 编码的字符串,然而他们不能处理非 Latin1 字符集的文本:
btoa('hello') // "aGVsbG8="
btoa('你好') // error!
// Firefox: InvalidCharacterError: String contains an invalid character
// Google Chrome: Uncaught DOMException: Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.
然而,经常看到有人会这么处理 base64 编码的字符串: