メイン

tips: web アーカイブ

2005年02月06日

MovableType エントリーの文字コードをコンバートする

MovableType で使用する文字コードは mt.cfg ファイル内で指定できますが、 これはあくまで画面に表示する際や、新しく書き込むエントリーのコードを指定できるに過ぎません。 データベース内にはエントリー時に指定していたコードで書き込まれているため データベースの内容自体をコード変換する必要があるのですが、 MovableType 自体の機能ではコード変換は提供されていません。 いくつかの方法が各サイトで紹介されていますが

  • エントリーを Export し、エディタ等で文字コードを変換してから再度 Import
    エントリーの Export / Import ではエントリーの ID までは引き継がれないため、 ID ベースのリンクなどを使用している場合正しいリンクでなくなる。
  • MySQL に直接アクセスし文字コードを変換
    独自にスクリプトを作成している方がいましたが、 DB が MySQL でない場合使用できません。

とくにデメリットのない方法として、 MT のライブラリを使用してコンバートするスクリプトが MT 開発用ブログに公開されています。

Movable Type の文字コード変換スクリプト

このスクリプトの場合 MT のライブラリ経由でエントリーやテンプレートの内容を取り出し、 MT 内の I18N モジュールもしくは Jcode を使用してコード変換した結果を また MT ライブラリ経由で DB に戻しているため、 DB の種類には全く依存せず使用できます。

なお、自分が実行した環境は

  • サーバOS : linux
  • Perl 5.8.0
  • DB Type : Berkeley DB
  • 文字コード : EUC -> UTF-8 -> Shift_JIS
でした。
はじめコンバート元のコード指定を「(auto)」(自動判定)にしていたところ 処理が途中から全く進みませんでしたが、 明示的にコードを指定すると全く問題ないなく変換できました。 スクリプトの内容を見てみたところ、(auto) を指定した場合は Jcode を、 明示的に指定した場合は I18N を使用しているため Jcode の呼び出しに問題があったようです。

なお、このスクリプトは

ブログデータベースの内容を一件ずつ呼び出し、しかるべき変更を加えて戻す
という処理を繰り返しているため、文字コード変換を行っている部分を書き換えれば 多くの応用が考えられます。 実際自分もエントリー内の特定の箇所を一括置換する必要があったため コード変換の変わりに perl の置換処理を入れ、 うまく稼動させることが出来ました。 (上記「文字コード変換スクリプト」をベースにしているため公開はしませんが、 興味のある方は個別に当サイトにご連絡ください)。

Unicode (UTF-8) では表示フォントが異なる?

詳しい調査は行っていませんが、 html ファイルのエンコードに UTF-8(Unicode)を指定すると スタイルシートで指定した sans-serif、arial などのフォント指定が 十分に反映できないようです。 バナーなどの大き目の文字で、 Shift_JIS、EUC ではともに sans-serif で表示できていた文字が UTF-8 を指定すると serif フォントで表示されてしまっていました。

2005年02月21日

MovableType 個別のテンプレート内で文字コードを変更する

MovableType でデータすべての文字コードを変換する方法は前述しましたが、 個々のテンプレートについて文字コードを変換するプラグインもあります。

たとえば RSS のみ UTF-8 にしたい場合など、非常に有効です。

About tips: web

ブログ「240K DEV」のカテゴリ「tips: web」に投稿されたすべてのエントリーのアーカイブのページです。過去のものから新しいものへ順番に並んでいます。

前のカテゴリはtips: maven (2.0)です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。