最近、WindowsのIME辞書をAndroid端末のNX!input(ISW13F、ATOK)に変換するのに調べたのでメモを。
他にも辞書は色々ありますが、今回触ったのだけです
(●´Д`●)
Windows IME(MS-IME2002の辞書ツールで確認)
文字コードはSJISかUnicode(BOM有)
改行コードはCRLF
タブ区切り
!に続くのはコメント行
Google日本語入力
文字コードはUTF-8(BOMなし)
改行コードはCRLF
タブ区切り
カテゴリ?先頭に「名詞」などの文字がある(タブ区切りなのは同じ)
ATOK(ISW13FのNX!inputで確認)
文字コードはSJISまたはUnicode(BOM有)
改行コードはCRLF
タブ区切り
品詞の終わりに*(名詞*など)
!!に続くのはコメント行
ことえり(Mac)
文字コードはUnicode
改行コードはCR
カンマ区切り
※手持ちがMacOS10.6.8だったので入出力の確認ができませんでした。
新しいものだとインポート、エクスポートに対応してるようです。
BOMはUnicodeの先頭に付いてる事があり、Unicodeである事と、その種類を表すものです。
Wikipedia – バイトオーダーマーク
http://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88%E3%82%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%83%9E%E3%83%BC%E3%82%AF
IMEで出力したものはUTF-16LEのようで、先頭に「FFFE」が付いてました。
Perlなどでファイルを読み込んでそのまま処理しようとすると、この先頭のBOMが邪魔なので以下のようにして取ってから扱います。
Perlだと「\x」に続き16進のコードがあると文字コードとして扱わるので、これで除去出来ます。
$value =~ s/^\xFF\xFE//; #UTF-16LEの場合
※ 上のはバックスラッシュになってるかもしれませんが、「\xFF\xFE」です。
連結する場合などでも、BOMが残ったままだと酷い事になるので忘れずに外しておきます。
ヘッダ部分に「!」や「!!」から始まるコメント行がありましたが、今回は除去しても変わりませんでした。
バージョンとかによっては何か意味があるのかもしれません?
今回PerlでIMEの辞書(テキスト)をNX!input用に変えた時のメモも少し。
Windowsが出すSJISはcp932というものらしく、Encode.pmなどでsjisを指定すると文字化けするのでcp932を指定します。
cp932 → utf8したところ「~」などが文字化けしました。
Windowsで発生するらしいのですが、全角チルダを出力すると波ダッシュの文字コードで出力され、これが文字化けするようです。
なので、cp932からutf8に変換したら、その直後に以下のようにして波ダッシュを全角チルダに置き換えておきます(utf8 → cp932の場合は逆をします)
$value =~ s/\x{301c}/\x{ff5e}/g;
こちらも参考に♪
Wikipedia – 波ダッシュ
http://ja.wikipedia.org/wiki/%E6%B3%A2%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5
Jcode.pmで確認したところ、IMEのUnicodeはucs2と判定されました。
これはUTF-16LEと同等のもののようです。
変換フォームは以下にあります
各種ユーザー辞書の変換フォーム(ATOK、Google日本語入力、IMEなど)
https://blog.aimix.jp/281/
Comment