1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

文字化けを Base64 生バイトから修復する Encoding Repair API を公開しました

1
Last updated at Posted at 2026-03-10

文字化けを Base64 生バイトから修復する Encoding Repair API を公開しました

文字化けの修復は、分かってしまえば単純に見える一方で、
実際にはかなり面倒です。

特に日本語を含むデータでは、

  • UTF-8 と Shift_JIS が混在する
  • CSV や TSV の一部だけ壊れる
  • ログや移行データが mojibake 化する
  • いったん文字列化された結果、元の情報が失われる

といった問題がよく起きます。

そこで、Base64 化した生バイト列そのものを入力として受け取り、
文字化けを修復する API
として Encoding Repair API を公開しました。


なぜ「文字列」ではなく「生バイト」なのか

文字化け修復で厄介なのは、壊れた後の文字列だけを見ても、
元の状態が分からない
ことです。

例えば、

  • どのエンコーディングとして読まれたのか
  • どこで誤変換されたのか
  • もともと UTF-8 だったのか Shift_JIS だったのか

といった情報は、文字列化の時点でかなり失われます。

そこでこの API では、Base64 にした raw bytes をそのまま渡す 方式を
採用しています。

つまり、

  1. 元データのバイト列を Base64 化する
  2. API に投げる
  3. API 側でエンコーディングを解析して修復する

という流れです。

この方式にすると、コピー&ペーストや途中変換で情報が欠けにくくなり、
日本語を含むレガシーデータでも比較的安全に扱えます。


何に使えるのか

主な用途は次のようなものです。

  • Shift_JIS / UTF-8 / EUC-JP 混在データの修復
  • レガシー CSV / TSV / LOG の文字化け補正
  • システム移行時に壊れたテキストの復元
  • AI / LLM に渡す前のテキスト正規化
  • 日本語を含む多言語データの前処理

特に「壊れた文字列をどうにかする」のではなく、元の bytes から戻したい という
場面に向いています。


API の基本仕様

リクエスト例:

{
  "raw_bytes_base64": "44OG44K544OI",
  "mode": "auto",
  "target_encoding": "utf-8"
}

レスポンス例:

{
  "result": {
    "fixed_text": "テスト",
    "target_encoding": "utf-8",
    "changed": false
  },
  "meta": {
    "version": "2.0.0",
    "mode_used": "auto",
    "detected_path": "utf-8->utf-8",
    "confidence": 1.0,
    "status": "ok",
    "execution_ms": 41.1,
    "input_bytes_length": 9
  }
}

resultmeta を分けた構造にしているので、

  • 修復結果そのもの
  • 判定経路
  • confidence
  • 実行時間

を分けて扱いやすくしています。


対応している主な文字コード

主に以下を対象にしています。

  • UTF-8
  • Shift_JIS / CP932
  • EUC-JP
  • Latin-1
  • Windows-1252

日本語中心ですが、英語や欧文が混じるデータも想定しています。


Python から使う例

例えば Python ならこのように使えます。

import base64
import requests

raw = "テスト".encode("utf-8")
b64 = base64.b64encode(raw).decode("ascii")

payload = {
    "raw_bytes_base64": b64,
    "mode": "auto",
    "target_encoding": "utf-8",
}

res = requests.post(
    "https://encoding-repair-api.p.rapidapi.com/encoding/v2/repair",
    json=payload,
    headers={
        "x-rapidapi-key": "YOUR_RAPIDAPI_KEY",
        "x-rapidapi-host": "encoding-repair-api.p.rapidapi.com"
    }
)

print(res.json())

※実際には、CSV ファイルやログファイルから bytes を取り出して Base64 化し、
 そのまま投げる使い方が自然だと思います。


この API を作った理由

文字化けは、技術的には昔からある問題です。
ですが、今でも普通に発生します。

特に、

  • 古い業務システム
  • Windows / Unix 混在環境
  • レガシー資産の移行
  • AI 用の前処理パイプライン

では、まだ十分に現役の問題です。

しかも厄介なのは、完全に壊れるよりも中途半端に読めてしまうケースが多いことです。
読めるようで読めない、直せそうで毎回微妙に違う。この面倒さが厄介です。

そこで、毎回それを調査するスクリプトを書くのではなく、
API として切り出して使える形にしよう と思い今回のAPIを作りました。


公開先


まとめ

Encoding Repair API は、Base64 化した生バイト列から文字化けを修復する API です。

すでに壊れた文字列だけを見るのではなく、元の bytes を扱うことで、

  • より安全に
  • より再現性を持って
  • 日本語を含むレガシーデータにも対応しやすく

することを狙っています。

文字化けは派手な問題ではありませんが、実務ではかなりしぶとく残ります。
だからこそ、こういうものこそ API として切り出す価値があると思っています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?