LoginSignup
1
1

More than 3 years have passed since last update.

FreeMindで保存するファイルのエンコーディングをUTF-8にする

Posted at

概要

FreeMindで作成したマップを保存すると、Unicodeが16進数化された形式になります。
これをUTF-8で保存できるようにしてみました。
(UTF-8で保存されたファイルは、なぜかそのままFreeMindで読み込めています。ので、今回は保存する処理だけUTF-8化します。)

UTF-8で保存するメリットは次のように考えています。

  • Spotlightの検索対象になる
  • grepできるようになる

今回試した環境

  • OS: macOS High Sierra
  • バージョン: 1.0.1
  • JDK: 1.8.0_201

手順

ソースをダウンロード

まず次の URL からソースファイルをダウンロードします。
https://sourceforge.net/projects/freemind/files/freemind/1.0.1/

次のファイルをダウンロードします。ダウンロードしたら解凍します。
freemind-src-1.0.1.tar.gz

修正するのは次の 2つのファイルです。

  • freemind/freemind/main/XMLElement.java
  • freemind/freemind/modes/mindmapmode/MindMapMapModel.java

ダウンロードしたソースを修正

修正内容は、それぞれ次の通りです。

freemind/freemind/main/XMLElement.java

まず編集するのは次の16進数化している処理です。
(変更前)

2456: default:
2457:    int unicode = (int) ch;
2458:    if ((unicode < 32) || (unicode > 126)) {
2459:        writer.write('&');
2460:        writer.write('#');
2461:        writer.write('x');
2462:        writer.write(Integer.toString(unicode, 16));
2463:        writer.write(';');
2464:    } else {
2465:        writer.write(ch);
2466:    }

これを次のようにコメントアウトします。
(変更後)

2456: default:
2457:    int unicode = (int) ch;
2458:    //if ((unicode < 32) || (unicode > 126)) {
2459:    //    writer.write('&');
2460:    //    writer.write('#');
2461:    //    writer.write('x');
2462:    //    writer.write(Integer.toString(unicode, 16));
2463:    //    writer.write(';');
2464:    //} else {
2465:        writer.write(ch);
2466:    //}

freemind/freemind/modes/mindmapmode/MindMapMapModel.java

次にファイル出力しているところを編集します。
(変更前)

285: BufferedWriter fileout = new BufferedWriter(new OutputStreamWriter(
286:        new FileOutputStream(file)));

これを次のように UTF-8 の指定を追加します。
(変更後)

285: BufferedWriter fileout = new BufferedWriter(new OutputStreamWriter(
286:        new FileOutputStream(file), "UTF-8"));

コンパイル

クラスパスに FreeMindアプリの JARファイルを指定して、編集したソースをコンパイルします。

cd ~/Downloads/freemind-src-1.0.1.tar.gz/freemind
javac -cp /Applications/FreeMind.app/Contents/Java/freemind.jar freemind/freemind/main/XMLElement.java freemind/freemind/modes/mindmapmode/MindMapMapModel.java

JARファイルを更新

オリジナルのJARファイルを更新する前に、拡張子.orgでバックアップしておきます。

cp -p /Applications/FreeMind.app/Contents/Java/freemind.jar{,.org}

コンパイルしたクラスファイルをJARファイルに更新します。

jar uf /Application/xxx/freemind.jar freemind/freemind/main/XMLElement.class freemind/freemind/modes/mindmapmode/MindMapMapModel.class

確認

それでは FreeMind で作成したファイルが UTF-8 で保存されるようになったか確認します。
事前に FreeMind で保存したファイルは、次のようになっていました。

(変更前)

<map version="1.0.1">
<!-- To view this file, download free mind mapping software FreeMind from http://freemind.sourceforge.net -->
<node CREATED="1562581830801" ID="ID_1221806494" MODIFIED="1562581837270" TEXT="&#x307b;&#x3052;">
<node CREATED="1562581837272" ID="ID_187674930" MODIFIED="1562581839399" POSITION="right" TEXT="&#x3075;&#x304c;"/>
</node>
</map>

このファイルを FreeMind で開いて、保存し直すと次のようになりました。

(変更後)

<map version="1.0.1">
<!-- To view this file, download free mind mapping software FreeMind from http://freemind.sourceforge.net -->
<node CREATED="1562581830801" ID="ID_1221806494" MODIFIED="1562581837270" TEXT="ほげ">
<node CREATED="1562581837272" ID="ID_187674930" MODIFIED="1562581839399" POSITION="right" TEXT="ふが"/>
</node>
</map>
1
1
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
1