base64

Benchmark created on


Setup

function base64Decode1(encoded) {
    let str = encoded.replace(/-/g, '+').replace(/_/g, '/');
    const pad = str.length % 4;
    if (pad) {
        str += '='.repeat(4 - pad);
    }
    try {
        const decoded = atob(str);
        return decodeURIComponent(
            decoded
                .split('')
                .map((c) => `%${c.charCodeAt(0).toString(16).padStart(2, '0')}`)
                .join(''),
        );
    } catch (e) {
        console.error('Base64解码失败:', e);
        return '';
    }
}

function base64Decode2(base64String) {
  // 处理 URL 安全的 Base64 字符
  const sanitized = base64String
    .replace(/-/g, '+')
    .replace(/_/g, '/');

  // 计算并添加必要的填充
  const padLength = (4 - (sanitized.length % 4)) % 4;
  const padded = sanitized + '='.repeat(padLength);
  
  try {
    // 解码为二进制字符串
    const binaryString = atob(padded);
    
    // 将二进制字符串转换为 UTF-8 字符串
    const utf8String = new TextDecoder('utf-8').decode(
      Uint8Array.from(binaryString, char => char.charCodeAt(0))
    );
    
    return utf8String;
  } catch (e) {
    throw new Error('无效的 Base64 字符串');
  }
}

const data = 'W3RpOuiNo+iAgF0KW2FyOueOi+aZk+WkqV0KW2FsOuiNo+iAgF0KW2J5Ol0KW29mZnNldDowXQpbMDA6MDAuMDBd6I2j6ICAIC0g546L5pmT5aSpClswMDowNS42Ml3or43vvJrpq5jmmZPmnb4KWzAwOjExLjI1Xeabsu+8mumSsembtwpbMDA6MTYuODdd57yW5puy77ya566A5rSBClswMDoyMi41MF3kvaDlkKzov5zlpITnmoTlo7Dlo7Dmsb3nrJsKWzAwOjI2LjExXQpbMDA6MjcuMjZd5Yu+5YuS5Ye65qKm5aKD5Lit55qE5bKb5bG/ClswMDozMC42OF0KWzAwOjMyLjQyXeWcqOa4heaZqOa8q+S4iuWyuOeahOa1t+a1qgpbMDA6MzYuMjddClswMDozNy4zMF3mmK/kuJbnlYzlsL3lpLTnmoTlm57lk40KWzAwOjQxLjg5XQpbMDA6NDIuNDdd5L2g55yL6YKj5LqR5LiK6I2J6ZW/6I666aOeClswMDo0NS45MF0KWzAwOjQ3LjI4Xee7veaUvuedgOaYjuWkqee6ouiJsueahOiKseiVigpbMDA6NTEuNjZdClswMDo1Mi4yNV3miJDplb/kuo7oi43ojKvojKvnmoTlvILkuaEKWzAwOjU1LjcyXQpbMDA6NTcuMjZd5Zue6aaW5L6d54S25pyb6KeB5pWF5Lmh5pyI5LquClswMTowNC4wM13pu5HlpJznu5nkuobmiJHpu5HoibLnnLznnZsKWzAxOjA5LjA2XeaIkeWNtOeUqOWug+WOu+Wvu+aJvuWFieaYjgpbMDE6MTMuODNd5rGX5rC05Yed57uT5oiQ5pe25YWJ6IO25ZuKClswMToxOC44NF3ni6zoh6rlnKjov5nlkb3ov5Dph4zmi5PojZIKWzAxOjIzLjg1XeWNleaequWMuemprOS4juS4lueVjOWvuemlrgpbMDE6MjguODFd5Y6G57uP56Oo6Zq+5Lqm5LiN5b+Y5Yid5b+DClswMTozMy44MV3lgZroh6rlt7HojaPogIDnmoTpqpHlo6sKWzAxOjM3Ljk3XeWLh+aVoui/vemAkOaipuaDs+eahOe6ouaXpQpbMDE6NDQuODRdClswMjowNC45Ml3kvaDlkKzov5zlpITnmoTlo7Dlo7Dmsb3nrJsKWzAyOjA4LjEzXQpbMDI6MDkuNzZd5Yu+5YuS5Ye65qKm5aKD5Lit55qE5bKb5bG/ClswMjoxMy4zM10KWzAyOjE0Ljc3XeWcqOa4heaZqOa8q+S4iuWyuOeahOa1t+a1qgpbMDI6MTguNDVdClswMjoxOS43Nl3mmK/kuJbnlYzlsL3lpLTnmoTlm57lk40KWzAyOjI0LjE1XQpbMDI6MjQuOTFd5L2g55yL6YKj5LqR5LiK6I2J6ZW/6I666aOeClswMjoyOC4wOV0KWzAyOjI5Ljc5Xee7veaUvuedgOaYjuWkqee6ouiJsueahOiKseiVigpbMDI6MzMuNzhdClswMjozNC43NF3miJDplb/kuo7oi43ojKvojKvnmoTlvILkuaEKWzAyOjM5LjEzXQpbMDI6MzkuODVd5Zue6aaW5L6d54S25pyb6KeB5pWF5Lmh5pyI5LquClswMjo0Ni40Nl3pu5HlpJznu5nkuobmiJHpu5HoibLnnLznnZsKWzAyOjUxLjM3XeaIkeWNtOeUqOWug+WOu+Wvu+aJvuWFieaYjgpbMDI6NTYuMzBd5rGX5rC05Yed57uT5oiQ5pe25YWJ6IO25ZuKClswMzowMS40MF3ni6zoh6rlnKjov5nlkb3ov5Dph4zmi5PojZIKWzAzOjA2LjMzXeWNleaequWMuemprOS4juS4lueVjOWvuemlrgpbMDM6MTEuMzRd5Y6G57uP56Oo6Zq+5Lqm5LiN5b+Y5Yid5b+DClswMzoxNi4yOV3lgZroh6rlt7HojaPogIDnmoTpqpHlo6sKWzAzOjIwLjQzXeWLh+aVoui/vemAkOaipuaDs+eahOe6ouaXpQpbMDM6MjYuMzJd6buR5aSc57uZ5LqG5oiR6buR6Imy55y8552bClswMzozMS4zOF3miJHljbTnlKjlroPljrvlr7vmib7lhYnmmI4KWzAzOjM2LjMyXeaxl+awtOWHnee7k+aIkOaXtuWFieiDtuWbigpbMDM6NDEuMzhd54us6Ieq5Zyo6L+Z5ZG96L+Q6YeM5ouT6I2SClswMzo0Ni4yOF3ljZXmnqrljLnpqazkuI7kuJbnlYzlr7nppa4KWzAzOjUxLjQ0XeWOhue7j+ejqOmavuS6puS4jeW/mOWIneW/gwpbMDM6NTYuMzBd5YGa6Ieq5bex6I2j6ICA55qE6aqR5aOrClswNDowMC40Nl3li4fmlaLov73pgJDmoqbmg7PnmoTnuqLml6UKWzA0OjA3LjU5XQpbMDQ6MTUuODVd5YuH5pWi6L+96YCQ5qKm5oOz55qE57qi5pel'

Test runner

Ready to run.

Testing in
TestOps/sec
1
base64Decode1(data)
ready
2
base64Decode2(data)
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.