TypeScript/JavascriptでBase64のエンコードまたはデコードをする方法を紹介しています。Node.jsの場合はBufferを、それ以外の場合はTextEncoderとTextDecoderを使うことをおすすめします。
Node.jsの場合はBufferを使用できます。次のようにimportします。
import { Buffer } from 'buffer'const encodedData = Buffer.from('Hello, world').toString('base64')URL safeなBase64エンコードの場合は以下のように base64url を指定します。クライアント側で動かす場合など、利用できない環境があります。
const encodedData = Buffer.from('Hello, world').toString('base64url')const decodedData = Buffer.from(encodedData, 'base64').toString()URL safeなBase64デコードの場合は以下のように base64url を指定します。クライアント側で動かす場合など、利用できない環境があります。
const decodedData = Buffer.from(encodedData, 'base64url').toString()Bufferを使用しない場合はbtoa、atobを使用します。
const encodedData = btoa('Hello, world')const decodedData = atob(encodedData)btoaとatobはASCII文字列しか対応していないので、Unicode文字列を扱う場合は以下のようにします。
const str = 'こんにちは'
const encodedData = btoa(String.fromCharCode(...Array.from(new TextEncoder().encode(str))))encodedData は 44GT44KT44Gr44Gh44Gv になります。
const encodedData = '44GT44KT44Gr44Gh44Gv'
const decodedData = new TextDecoder().decode(
Uint8Array.from(atob(encodedData), (c) => c.charCodeAt(0))
)decodedData は こんにちは になります。
btoaとatobはASCII文字列しか対応していないので、Unicode文字列を扱う場合は以下のようにします。
Warning
unescapeとescapeの使用は好ましくないとされているので、前述のTextEncoderとTextDecoderを使う方法をおすすめします。
参考資料:
const encodedData = btoa(unescape(encodeURIComponent('こんにちは')))encodedData は 44GT44KT44Gr44Gh44Gv になります。
const decodedData = decodeURIComponent(escape(atob(encodedData)))decodedData は こんにちは になります。