汚い MessagePack の hex または base64 文字列をここに貼り付けて、「クリーンアップ!!」をクリックしてください汚い msgpack を貼り付け

MessagePack クリーナーが実際にやっていること

少しだけ正直になりましょう: MessagePack はバイナリフォーマットです。Cloudflare Worker のログからコピペした際に数バイトが切れてしまった場合、どんなツールも魔法のように戻すことはできません — そのバイトはもう失われており、github.com/msgpack/msgpack の仕様は長さプレフィックス方式なので、末尾が欠ければ何をしてもデコードは失敗します。だからこのページは壊れたバイナリデータを修復するふりはしません。

代わりにやっているのはもっと地味だけど役に立つことです: ターミナル、デバッガ、iOS コンソール、クリップボードを通る間に hex や base64 (RFC 4648) ダンプが拾ってしまうフォーマットノイズを取り除きます。具体的には、周りの空白を削り、囲みクオートを剥がし、Python の b'...' バイトリテラルをほどき、\xNN エスケープシーケンスを生の hex 桁に展開し、0x プレフィックスを取り除き、ペイロード内のカンマと空白を捨てます。きれいになった結果は、本物の msgpack デコーダ — 公式の @msgpack/msgpack ライブラリや仕様準拠の実装 — が文句なく受け付けるものです。

具体例: 左側に b'\x83\xa7orderId\xa8ORD-7421...' を貼り付け、クリーンアップを押すと、右側に生の hex 文字列が出てきて、それをそのまま MessagePack ビューアに入れるか、Node の REPL で Uint8Array に流せます。派手なことは何もありません。ただノイズを取り除くだけです。

貼り付けた MessagePack 文字列のクリーンアップ手順

3 ステップ。ログ行から何かをコピーしたばかりで、それをデコーダに渡せる hex にしたいときのためのものです。

1

汚い文字列を左ペインに貼り付ける

持っているものを左のエディタに放り込んでください — Python の repr()、iOS デバイスのコンソール行、curl --data-binary @file | xxd の出力、Cloudflare Worker のログエントリ、何でもです。クリーナーは入力がきれいである必要はありません。プレフィックスとエスケープが混ざったわざと汚いサンプルを試すには 汚い hex のサンプル を押してください。貼り付けるかもしれないものの例:

b'\x83\xa7orderId\xa8ORD-7421\xa5items\x92\x82\xa3sku\xa7SKU-101\xa3qty\x02\x82\xa3sku\xa7SKU-244\xa3qty\x01\xa8customer\xa8Ava Chen'

これは msgpack-python が出力した本物の Python バイトリテラルです。クリーナーは b'...' のラッパーを認識し、剥がして、各 \xNN を生の hex に変換します。

2

クリーンアップをクリック

緑の クリーンアップ!! ボタンを押してください。クリーンアップがクリック駆動なのは意図的です — 出てきたものを受け入れる前に、入っていったものを見るべきだからです。右ペインにきれいな hex (または自動検出された base64) が表示され、エディタの下のノートパネルが適用したすべての変換を列挙するので、何も無言では起きません。

3

結果を本物のデコーダに渡す

右ペインのきれいな文字列を、MessagePack ビューアMessagePack → JSON ツールに入れてください。バイトが本当に無傷でフォーマットだけが問題だったなら、デコードされた JSON が見えるはずです — SKU-101 の明細、顧客 Ava Chen、すべてが。それでもデコーダが文句を言うなら、問題は本物の破損か切り詰めで、唯一の修正方法はソースからバイトを取り直すことです。

実際にこれを使うとき

Cloudflare Worker のログからバイトを取り出す

Workers はバイナリペイロードを 0x83 0xa7 6f 72 64 65 72... のように、バイト間にスペースを入れて各バイトに 0x を付けてログ出力するのが大好きです。その行をコピーしてここに貼り付けると、クリーナーがプレフィックスとスペースをワンクリックで取り除き、本物のデコーダが消化できる 83a76f7264657249... が手に入ります。

デバッガから出てきた Python の repr をほどく

pdb でブレークポイントに当たり、p msgpack.packb(order) を実行して b'\x83\xa7orderId\xa8ORD-7421' が返ってきました。これは Python のバイトリテラルです — b プレフィックスとクオートはデータの一部ではありません。クリーナーがそれを剥がし、各 \xNN を実際の hex ペアに展開するので、手で書き直すことなく結果をビューアに貼り付けられます。

curl --data-binary | xxd ダンプをきれいにする

サーバが受け取ったものを確認するために curl --data-binary @msg.bin https://api.example.com | xxd を実行しました。xxd の出力は左に行番号、右に ASCII、真ん中にスペース区切りの hex バイトがあります。アドレス列と ASCII 列を自分で削り、真ん中をクリーナーに貼り付けると、バイト間のスペースを取り除いて hex を再びひとつのまとまった文字列にしてくれます。

iOS デバイスコンソールから貼り付ける

iOS のコンソール出力はバイナリペイロードをシングルクオートで囲み、ソフト改行を挿入することがあります。クリーナーは囲みクオートと空白を一度のパスで処理するので、何かをデコードする前にテキストエディタで検索置換ごっこをする手間が省けます。

よくある質問

このツールは壊れた MessagePack バイナリデータを修復できますか?

いいえ、できると主張するツールには疑いの目を向けるべきです。MessagePack は長さプレフィックス付きのバイナリフォーマットです — 長さフィールドの途中でバイトが欠けていたり間違っていたりすると、デコーダはそこに何があるべきだったか推測できません。このページは貼り付けの余計な文字とフォーマットノイズだけを修正します。バイトが本当に壊れているなら、修正方法はソースから取り直すことです: リクエストを再実行する、ログ保持ストアから読み直す、データベースから再エクスポートする。失われたバイトをソフトウェアで代替する方法はありません。

ここでの「クリーンアップ」とは具体的に何ですか?

6 つの具体的な正規化です: 周りの空白を削る; 囲みのシングルまたはダブルクオートを剥がす; Python の b'...' / b"..." バイトリテラルをほどく; \xNN エスケープシーケンスを生の hex 桁に展開する; 各バイトの 0x プレフィックスを取り除く; バイト間の空白とカンマを取り除く。それらすべての後、結果は構造的に健全か確認するために hex か base64 のどちらかとして 1 回パースされます。エディタの下のノートパネルには、あなたの入力に対して実際に発火したすべての変換が列挙されます。

入力時の自動クリーンアップではなく、なぜクリーンアップボタンがあるのですか?

意図的です。他のツールのほとんどは入力変更時に自動更新します。なぜなら入力が人間が読めるもので、即座のフィードバックがほしいからです。これは逆 — 入力はエスケープシーケンスの山で、あなたの目標は出力を信頼する前に何が変換されたかを検証することです。クリック駆動なら、貼り付けて、入力を見て、クリックして、ノートパネルを読んで期待通りのことをしたか確認できます。

データはブラウザの外に出ますか?

いいえ。クリーンアップ全体がこのタブ内でローカルに動きます。fetch なし、アップロードなし、入力に対するテレメトリなし。タブを閉じればデータは消えます。とはいえ、URL バーは公共の場のように扱ってください — 秘密を含むペイロードをクエリ文字列に貼り付けないでください。終わったら機密情報を載せたクリップボードはクリアしてください。

入力が hex ではなく base64 だったらどうなりますか?

自動検出されます。入力が (空白、カンマ、0x\xNN エスケープを取り除いた後で) すべて hex 文字で偶数長なら hex として扱います。そうでなければ標準の base64 を試します。どちらにしても、きれいになった出力は検出されたフォーマットを保持します — きれいな hex は hex のまま、きれいな base64 は base64 のままです。次は結果を MessagePack ビューアに入れてください。同じ方法で自動検出します。

なぜ出力が入力とまったく同じに見えることがあるのですか?

あなたの入力がすでにきれいだったからです — やることがありません。その場合、ノートパネルには「入力はすでにきれいでした。」と表示されます。これは正常で良いことです。クリーナーは忙しく見せるためだけに変換をでっち上げたりしません。

その他の MessagePack ツール

フォーマットをきれいにするのは最初の一歩です。文字列がきれいになったら、これらでバイトをデコードして往復させましょう: