Потеря линии разрыва - Base64 до UTF-8 - PullRequest
0 голосов
/ 20 ноября 2018

Я работаю с бэкэнд-сервисом, который отправляет мне обратно base64 в виде простого текста.

Когда я регистрирую его в консоли, копирую / вставляю Base64Decode , я вижу, что моя строка содержитразрыв строки, это то, что я хочу.

Но когда я использую функции для преобразования этой строки base64 в строку UTF-8, разрыв строки теряется.

Что я пробовал:

function b64DecodeUnicode(str) {
  return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) {
       return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)
   }).join(''))
}

Это решение взято из здесь , но не работает.

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Проблема заключалась в том, что после декодирования base64 в UTF-8 перевод строки символы (ASCII 10) преобразуются в возврат каретки символы (ASCII 13).

Я не знаю почему, может быть, мне что-то не хватает в декодере base64.

0 голосов
/ 20 ноября 2018

Я пробовал решение из здесь с разрывом строки как \n, оно работает:

function b64EncodeUnicode(str) {
  return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) 
  {
    return String.fromCharCode(parseInt(p1, 16))
   }))
}

function b64DecodeUnicode(str) {
  return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) {
    return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)
  }).join(''))
}

console.log(b64DecodeUnicode(b64EncodeUnicode('✓ à la\nmo\nde')));
...