日本語入力のユーザー辞書について、 下にあげた一般的な日本語入力エンジンで 共通にインポート可能なフォーマットがあります。 なお品詞は名詞に限るとします。

共通フォーマット

辞書をエクスポートするとヘッダが付加されたりしますが、 本体のフォーマットはどのIMEでもだいたい同じです。

    <ひらがな> <タブ> <変換文字列> <タブ> <品詞> <タブ> <コメント> <改行>

したがってエンコードだけの問題なのですが、 MS-IMEが一番制限がきつくてMS-IMEが読み込める utf-16 & little-endian & BOM付き (以下utf-16leb) にすればどの日本語入力エンジンからでもインポートできるようになります。 要するにWindows様に合わせろということです。

まったくutf-16はウンコです。 本当は滅んでほしいのですが…

utf-8からutf-16lebに変換するには?

Mac

テキストエディットで保存時にエンコーディングとして "Unicode (UTF-16)" を選べば、utf-16lebで書き出せます。 ただし新規作成した場合でないと選べないので、 別に開いたウインドからコピペする必要があります。

Windows

メモ帳でエンコーディングとして "Unicode"を選べば、 utf-16lebで書き出されます。

Perlスクリプト

iconvでは直接この形式に変換できないみたいで、 以下のようなことをしないとダメっぽいです。

    # printf "\377\376" > bom-le.txt
    # cat utf8.txt | iconv -f utf-8 -t utf-16le > utf16le.txt
    # cat bom-le.txt utf16le.txt > utf16leb.txt

Perlスクリプトを書いたのでおいておきます。 ご自由にお使いください。

中身はこんな感じです。

    #!/usr/bin/perl

    # utf-8のファイルを utf-16 little-endian BOM付きに変換する。
    # iconvで -t utf-16le とやるとBOM無しのファイルができるので、
    # 先頭に \xFF\xFEを追加しても良いが。

    # cat utf8.txt | utf8-to-utf16leb.pl > utf16leb.txt

    use strict;
    use Encode;

    # 読み込む
    my $text = '';
    while( defined(my $line = <>)){
     $text .= $line;
    }

    # CRLFにしてしまえ!
    $text =~ s/\r\n/\n/g;
    $text =~ s/(\n|\r)/\r\n/g;

    # Little Endian UTF-16 に。
    Encode::from_to($text,"utf-8","utf-16le");

    # BOMを書き出す。
    print "\xFF\xFE";

    # 本文を書き出す。
    print $text;

    # おしまい

home > 日本語入力用辞書
(C)2017 @Hepota