vntファイルのBODY部をtxtファイルに保存する。
経緯
vnt
ファイルは、ガラケーというかガラホで使われている内蔵アプリケーションのメモ帳で使われている1つのアイテム分の送信時に使われるファイルの形式。ガラケーでも使われていただろう形式。今回使ったガラホはKYF37
というもの。公式の製品リンク:
全件まとめてスマホに送りたかったが1件ずつしか送れないので、bluetoothを使って1件送ってみると受け取り側のスマホ(oppo reno5A)で認識できないファイル形式だよーというメッセージが表示された。それでもスマホ内のDownloads/Bluetooth/
など(端末依存)に保存されているのでとりあえずそちらに全部(10件ほど)送った。
VNote
というAndroidアプリで認識できるかもしれないと思ったが、文字化けしていた。アプリはこちら:
よっていったんPCにvnt
ファイルを移してtxt
に変換してからスマホに移すことにした。
vnt
ファイルとtxt
ファイルに変換するPCソフトもあるようだが、自分の環境ではエラーが出て動かなかった。
vntの形式
こんな形式になっているようだ:
BEGIN:VNOTE
VERSION:1.1
DCREATED:20210818T004640Z
LAST-MODIFIED:20210818T004640Z
BODY;CHARSET=Shift_JIS;ENCODING=QUOTED-PRINTABLE:<encoded_string_multiline>
END:VNOTE
BODYにメモ帳に打ち込んだ中身があるようだ。quoted-printable
形式でエンコードされているらしい。
BEGIN:VNOTE
と先ほどのAndroidアプリ名が一致しているのは単なる偶然。
おそらく、shift-jis
のテキストをquoted-printable
でエンコードしているように見えるので、python
でこの部分をデコードすることにした。
なお、PCに移したファイルはmemo.vnt
とmemo-<int>.vnt
という感じの連番で保存されている。
vntをtxtに変換
RFC1521: 5.1. Quoted-Printable Content-Transfer-EncodingのRule#5
のソフト改行によって、bodyの最終行以外の各行の末尾には、ファイル内の符号化とは関係のない改行(ソフト改行)を示す=
が挿入されている。1行につき76文字と決まっているためこのルールがあるようだ。
このため、quoted-printable
をデコードできるpythonモジュールquopri
に渡す前に、これらのソフト改行を削除しておく。
このようになった:
このvnt_to_txt.py
ファイルをmemo.vnt
などと同じフォルダ・ディレクトリにおいてpython <vnt_to_txt.py>
など実行すればOK!
保存されるtxtファイルはutf-8
エンコーディングにした。
おわり
PCの変換ソフトが使えなかったのは意外だがpythonにモジュールがあって助かった。感謝。
以上です。