Konvertieren Sie eine Zeichenfolge in JavaScript in Base64. btoa und atob sind veraltet

Lesezeit: 4 Minuten

Caleb Prengers Benutzeravatar
Caleb Prenger

Ich habe in letzter Zeit an einigen Projekten in VS Code gearbeitet und plötzlich in meinem Code Benachrichtigungen erhalten, dass BTOA und ATOB jetzt veraltet sind. Ich kann hierfür außer VS-Code keine Ressource finden. Wenn das wahr ist, welche Alternative gibt es?

  • Diese Funktionen sind eindeutig nicht veraltet. Es wäre hilfreich, wenn Sie den genauen Fehler angeben würden, den Sie sehen.

    – I habe einmal mit einem Bär gekämpft.

    19. August 2021 um 13:58 Uhr

  • Laut VS-Code sind sie veraltet. Es wird empfohlen, Buffer.from(str, “base64”) zu verwenden, aber das existiert in JavaScript nicht.

    – Caleb Prenger

    19. August 2021 um 14:05 Uhr

  • Es existiert definitiv in Javascriptim Knoten. btoa ist für das Web. Deine Frage hat das web Tag, also habe ich angenommen, dass Sie das Web verwenden, aber Ihre IDE scheint zu denken, dass Sie Node schreiben. Also, was ist es?

    – I habe einmal mit einem Bär gekämpft.

    19. August 2021 um 14:09 Uhr

  • Sie leben und sind gut darin HTML-Standard (heute aktualisiert). Ist das das gleiche Problem: base64 – Wie codiere ich einen Base-64-String in ReactJS, wenn BTOA veraltet ist? An MDN Es heißt: „Beachten Sie, dass btoa() die Übergabe von Binärdaten erwartet und eine Ausnahme auslöst, wenn die angegebene Zeichenfolge Zeichen enthält, deren UTF-16-Darstellung mehr als ein Byte belegt.“

    – chrwahl

    19. August 2021 um 14:09 Uhr

  • Ich habe einmal mit einem Bären gekämpft und hatte eine gute Idee. Ich schreibe ein Vue-Projekt, daher denkt es wahrscheinlich, dass ich versuche, in Node zu schreiben.

    – Caleb Prenger

    19. August 2021 um 14:30 Uhr

Die Node-Funktionen btoa() und atob() sind die einzigen, die veraltet sind. Wenn Sie jedoch am DOM-Code (Front-End) arbeiten und diesen veralteten Hinweis sehen, können Sie das Fensterobjekt verwenden, um ihn zu umgehen.

window.atob()

Für mehr Information

Cassio Seffrins Benutzeravatar
Cassio Seffrin

Diese Funktionen btoa und atob sind für Node JS veraltet. Wenn Sie für den Webbrowser programmieren, müssen Sie nur das Fenster voranstellen, um diese veraltete Markierung zu entfernen.

kodieren:

window.btoa('test') 

Ergebnis: dGVzdA==

zu entschlüsseln

window.atob('dGVzdA==')

Ergebnis: Test

Andernfalls können Sie den Puffer mit „yarn add buffer“ oder „npm i buffer“ installieren, um ihn im Browser auszuführen. Die API des Puffermoduls ist identisch mit der Puffer-API des Knotens.

Hier ist ein React-Beispiel, das das Javascript-Modul für den Browser verwendet, aber es kann auf jeder modernen Javascript-Frontend-App ausgeführt werden, die Webpack oder Parcel oder sogar Vanilla-Javascript mit Skript src verwendet:

//this will run on browser    
import React from "react";
import { Buffer } from 'buffer';
export default function App() {

  const encodeBase64 = (data) => {
    return Buffer.from(data).toString('base64');
  }
  const decodeBase64 = (data) => {
    return Buffer.from(data, 'base64').toString('ascii');
  }

  return <div>
    {'encoded test to base64 = ' + encodeBase64('test')}<br />
    {'decoded dGVzdA== to ascII = ' + decodeBase64('dGVzdA==')}
  </div>;
}

Der obige React-Hook ergibt Folgendes:

encoded test to base64 = dGVzdA==
decoded dGVzdA== to ascII = test

TLDR:

btoa(): akzeptiert eine Zeichenfolge, bei der jedes Zeichen ein 8-Bit-Byte darstellt. Wenn Sie eine Zeichenfolge übergeben, die Zeichen enthält, die nicht in 8 Bits dargestellt werden können, wird sie wahrscheinlich kaputt gehen. Wahrscheinlich ist BTOA deshalb veraltet.

atob(): gibt eine Zeichenfolge zurück, in der jedes Zeichen ein 8-Bit-Byte darstellt.

Wenn Sie NodeJS verwenden, ersetzen Sie einfach atob und btoa durch Buffer. Hier ist die offizielle Dokumentation zu Puffern in NodeJS:

//With NodeJS

export const encodeBase64 = (data) => {
    return Buffer.from(data).toString('base64');
}
export const decodeBase64 = (data) => {
    return Buffer.from(data, 'base64').toString('ascii');
}

Noch innerhalb von VS Code habe ich mir die Kommentare zur veralteten Funktion btoa(str) angesehen. Als Ersatz wird Folgendes vorgeschlagen:

const base64Str = Buffer.from(str, 'utf8').toString('base64');

  • Wie wäre es mit atob?

    – Aseer KT Miqdad

    18. November 2021 um 9:56 Uhr

  • @AseerKTMiqdad mache einfach das Gegenteil: const str = Buffer.from(base64str, 'base64').toString('utf8');

    – Tristan Pct

    20. November 2021 um 10:51 Uhr

  • Die Buffer-Klasse ist im Browser nicht verfügbar.

    – Peter

    8. Juni 2022 um 6:30 Uhr

  • @Peter, für Browser-Apps müssen Sie die installieren Buffer lib via npm i buffer dann importieren Sie es mit import { Buffer } from "buffer";

    – Sareno

    2. November 2022 um 12:49 Uhr

  • Das hat bei mir funktioniert, var byteCharacters = Buffer.Buffer.from(base64, ‘base64’).toString(‘binary’);

    – Herr Leeds

    30. Januar um 22:56


Kingbeencents Benutzeravatar
Kingbeencent

btoa Und atob sind nur für Node.js veraltet. Wenn Sie das voranstellen window. Sie werden dieses Verfallszeichen los.

Auf der anderen Seite, wenn Sie versuchen, es zu verwenden btoa oder atob im Backend sollten Sie auf jeden Fall verwenden Buffer Schnittstelle.

Verweise:

  1. https://github.com/microsoft/TypeScript/issues/45566#issuecomment -905057883
  2. https://github.com/microsoft/TypeScript/issues/45566
  3. https://developer.mozilla.org/en-US/docs/Web/API/btoa (Keine Verfallswarnungen!)
1454180cookie-checkKonvertieren Sie eine Zeichenfolge in JavaScript in Base64. btoa und atob sind veraltet

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy