メモ(MacOS標準アプリ)の中身をプレーンテキストファイルに出力する
概要と結果
MacOS標準アプリの『メモ (Notes)』の中身を移行しようと思ったら、ファイル実体がSQLiteのバイナリデータだった。
メモの中身移行しようと思ったら実体ファイルSQLite Blobでクs…うんち!!!!!!!! pic.twitter.com/oqeR08R7bl
— 上位者アメンドーズ (@tatsuzaki98) 2021年5月14日
このバイナリを以下の通りまあまあ許容できる範囲でプレーンテキスト化することに成功した。
以下のリポジトリで公開している。(かなりやっつけ仕事で書いているので万が一使う場合は自己責任で)
バイナリデータの正体はMacBinary Archive
SQLiteのBlobをファイルとして保存したところ、MacBinary Archiveというファイルらしい。
MacOSなら標準のArchive Utilityで解凍できるが、Terminalからひらく場合は単に
$ open file
とすれば良い。
バイナリデータの解凍先はutf-8と非utf-8が混在する
バイナリデータを解凍したは良いものの、以下のようにutf-8と非utf-8のコードが混在している。書式などのデータだろうか。
ここまで来たらあとはutf-8の仕様に沿った部分だけdecodeしてやればよい。
utf-8を16進数文字列として読み込んだ時、ascii文字は20から7e、非ascii文字はe.[8-b].[8-b].である。
以下のような正規表現で無理矢理取り出す。
# python3 re.findall(r'(e. [8-b]. [8-b].) | ([2-7][0-f])', hex_str)
ここまでの処理をPython3とMakefileでまとめたので、詳細は冒頭のリポジトリを参照のこと。
以上。