サクラエディタのマクロで Unicode エスケープ文字列をデコードする
サクラエディタ v2.4.1.2849
はじめに
コマンドプロンプト等でAPI叩いて遊んでると、稀にUnicodeエスケープされた文字列 が返ってくることがあります。
{
"message": "\u3053\u3093\u306b\u3061\u306f"
}
この中身をちょっと確認したいなんて場合は、何らかのデコード処理をする必要が出てくる。
変換サイトなんて探せばゴマンとあるけど、セキュリティ上何となく使いたくない。
それでデータ抜かれてどうこうなんてまず無いとは思うが、ローカルで済むならそっちの方が良い。
また別の理由からローカルで完結させたい場面もあるかと思います。
選択肢はいくつかあるけれど、今回はサクラエディタのマクロ機能を使ってエスケープされた文字列をデコードする方法を共有します。
サクラエディタのマクロ機能について
サクラエディタには、WSH(Windows Script Host)を利用して JScript や VBScript を実行できるマクロ機能があります。
これにより色々良いこと悪いことできます。
マクロの実行は以下で可能です。
メニューバーのツール選択 -> 名前を指定してマクロ実行 -> マクロ用のファイルを選択、開く
指定のマクロをショートカットに登録なんかもできます。
主題、デコード用コード
選択されたテキストからエスケープされた文字列を抽出し、対応する文字に変換するコードです。
Editor.SelectAll();
var text = Editor.GetSelectedString();
// JSON形式の \uXXXX をデコード
text = text.replace(/\\u([0-9A-Fa-f]{4})/g, function(match, p1) {
return String.fromCharCode(parseInt(p1, 16));
});
// XML形式の &#xXXXX;(16進)と &#DDDD;(10進)をデコード
text = text.replace(/&#x([0-9A-Fa-f]+);|&#([0-9]+);/g, function(_, hex, dec) {
var codePoint = hex ? parseInt(hex, 16) : parseInt(dec, 10);
return String.fromCharCode(codePoint);
});
Editor.InsText(text);
処理内容の解説
- Editor.SelectAll() 現在開いているファイルの全テキストを選択します。
- Editor.GetSelectedString() 選択されたテキストを取得します。
- text.replace(regex, ...) 正規表現でエスケープされた文字列を検出し、10進数/16進数を文字コードに変換します。
- Editor.InsText(text) 変換後の文字列をエディタに挿入します。
使い方
- サクラエディタに変換したい文字列をペーストする
- 作ったマクロを実行する
- 変換された文字列が見れる!
感想ほか
- javascriptやpythonだとデコード用のメソッドがデフォルトで用意されてる分もっとスマートに書ける、と思う
- ただ今回の方法は備え付けの実行環境使ってるのと作業がエディタ内で完結してるのがアピールポイント
- プラグイン入れるのに忌避感無いならvscode使うのが手っ取り早いというのはその通り
- jsonに限ればjq入れれば解決というのもその通り(個人的にはわざわざ入れるほどのことではないと思うが)
- postman使う場合はどうなのかしらという疑問。。あれ確か叩く前と後にスクリプト挟めたはず
- あと久々のマクロ組みで楽しかった
その他
thanks for reading!