Вещи меняются. Методы escape / unescape устарели.
Вы можете кодировать строку URI перед кодировкой Base64. Обратите внимание, что это не кодирует кодировку UTF8 с кодировкой Base64, а скорее кодирует кодированные в кодировке Base64 данные. Обе стороны должны согласовать одну и ту же кодировку.
См. Рабочий пример здесь: http://codepen.io/anon/pen/PZgbPW
// encode string
var base64 = window.btoa(encodeURIComponent('€ 你好 æøåÆØÅ'));
// decode string
var str = decodeURIComponent(window.atob(tmp));
// str is now === '€ 你好 æøåÆØÅ'
Для проблемы с ОП должна решаться проблема сторонняя библиотека, такая как js-base64 .