UTF-8 から Base64URL への変換ガイド(2026)

A clean, modern visual representing the conversion from text data to secure web URL strings.

UTF-8 を Base64URL に変換するには、4 つの手順を実行します:(1)テキストを UTF-8 バイトにエンコード、(2)標準 Base64 を適用、(3)+- に、/_ に置換、(4)末尾の = パディングを削除。これにより、RFC 4648 に準拠したURL セーフな文字列が生成され、JWT や API ヘッダーで広く使用されています。

標準 Base64 と Base64URL の違い

文字 標準 Base64 Base64URL 理由
62 番目の文字 + - + は URL でスペースを意味する
63 番目の文字 / _ / は URL のパス区切り文字
パディング = 必須 省略 = は URL で %3D になる
URL セーフ いいえ はい クエリ文字列やファイル名に直接使用可能

RFC 4648 §5 により、この「URL およびファイル名セーフアルファベット」はシステム間の互換性を保証します。

標準 Base64 と Base64URL の安全でない文字の簡単な比較図。

4 ステップの変換プロセス

ステップ 操作 例(“Hello”)
1 UTF-8 テキスト → バイト H e l l o → バイト配列
2 バイト → 標準 Base64 SGVsbG8=
3 +- に、/_ に置換 ここでは変更不要
4 末尾の = パディングを削除 SGVsbG8

Wikipedia によると、Base64 エンコードによりデータサイズは約 33% 増加します。

4 ステップの変換パイプライン:テキスト → バイト → Base64 → Base64URL。

Unicode と絵文字の処理

NextUtils によると、Base64 はエンコードであり、暗号化ではありません——テキストのみのチャネルを通じてデータを転送するものです。文字化け(「Mojibake」)を防ぐには、必ず TextEncoder を使用して UTF-8 バイトに変換してください。

入力 TextEncoder なし TextEncoder あり
Hello 世界! 🌍 文字化け / TypeError 正しい Base64URL

コード例

JavaScript(ブラウザ)— Unicode セーフ

function toBase64Url(str) {
    const bytes = new TextEncoder().encode(str);
    const base64 = btoa(String.fromCharCode(...bytes));
    return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
}

Python 3 — 標準ライブラリ

AskPython に基づく説明:

import base64

data = "Hello 世界! 🌍"
encoded = base64.urlsafe_b64encode(data.encode('utf-8')).decode('utf-8').rstrip('=')
print(encoded)

Node.js — Buffer 変換

const str = "API_Payload_Data";
const base64url = Buffer.from(str, 'utf8')
    .toString('base64')
    .replace(/\+/g, '-')
    .replace(/\//g, '_')
    .replace(/=/g, '');

トラブルシューティング:パディングエラー

エラー 原因 解決方法
binascii.Error: Incorrect padding = パディングが不足 長さが 4 の倍数になるまで = を追加
atob()TypeError 非 ASCII 文字が含まれている 先に TextEncoder を使用
出力が文字化け UTF-8 エンコードをスキップした Base64 の前に必ずバイトにエンコード

AskPython によると、不足パディングの計算方法:padding_needed = (4 - len(data) % 4) % 4、その後、該当する数の = 文字を追加します。

ユースケース:JWT と Data URI

JWT(JSON Web Token)の構造

部分 内容 エンコード方式
ヘッダー アルゴリズム + トークンタイプ Base64URL
ペイロード クレーム(ユーザーデータ、有効期限) Base64URL
署名 HMAC または RSA 署名 Base64URL

JWT は通常 eyJ で始まります——これは {(JSON の左波括弧)の Base64URL エンコードです。

JWT 構造の可視化図。3 つの Base64URL パートを示しています。

ユースケース別の Base64 と Base64URL の使い分け

ユースケース エンコード方式 パディング
JWT トークン Base64URL 省略
Data URI(埋め込み画像) 標準 Base64 必須
HTTP Basic 認証 標準 Base64 必須
URL クエリパラメータ Base64URL 省略

まとめ

4 つのステップ:UTF-8 バイト → Base64 → +/-_ に置換 → パディングを削除。JavaScript では TextEncoder、Python では base64.urlsafe_b64encode()、Node.js では Buffer を使用してください。RFC 4648 に準拠してシステム間の互換性を確保します。Base64URL はエンコードであり、暗号化ではありません——セキュリティには AES-256 または TLS を使用してください。

よくある質問

Base64URL は暗号化と同じですか?

いいえ。Base64URL は可逆的なエンコードです——鍵がなくても誰でもデコードできます。機密データの保護には AES-256 または TLS/SSL を使用してください。

なぜ Base64URL は標準の Base64 デコーダで失敗するのですか?

標準デコーダは +/、および = パディングを期待します。Base64URL は -_ を使用し、パディングを省略します。デコード前に文字の置換を元に戻し、パディングを復元する必要があります。

なぜ JWT ではパディングが省略されるのですか?

= 文字は URL で %3D になり、文字列が長くて読みにくくなります。RFC 4648 では、デコーダがパディングマーカーなしで元の長さを再構築できるため、省略が許可されています。

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です