« WebDAVを経由した不正アクセス? | メイン | 内部はEUCでも、Webサイト側はUTFで構築...って出来ない? »
文字コードの変換をやってみた
2004年06月18日
やっと....文字コードの変換にトライしてみました。

MySQLのデータをセーブする方法、いろいろあるのかもしれませんが、
mysqldumpというコマンドを使って、テーブルのCREATE文やINSERT文を作成する方法をとることにしました。

mysqldump データベース名 > 出力先SQLファイル名 --password=パスワード
これだけです。


&mysqldump kiyo >kiyo.sql --password=*****


とてもカンタン:ー)。

出力されたSQL文をnkfでEUCコードにコンバートして、別データベースでSQLを実行してみたら、あっけないほど簡単にでEUCコードでのデータベースはできがってしまいました。
$ nkf -e kiyo.sql >kiyo.euc.sql
$mysql -ukiyo -p kiyo_euc < kiyo.euc.sql

ためしに、検索してみました。

mysql> select entry_title from mt_entry;
+-------------------------------------------------------------+
| entry_title                                                 |
+-------------------------------------------------------------+
| Movable Type 3.0 Developer Edition日本語版ベータ 設定時メモ |
| コメントのプレビュー の問題、 画像のサムネイル             |
| スタイルシート                                              |
| (続)スタイルシート                                          |
| コメントプレビューの不具合修正について                      |
| MySQLへの移行..あれこれ                                     |
| 今後の課題....文字コード変換など                            |
+-------------------------------------------------------------+
7 rows in set (0.00 sec)

エントリーのタイトルを検索したところ、きちんと表示されました。
MySQLの環境がEUCですので、内容もEUCに変換されたということです。

でも、その先でちょっと戸惑ってしまったのです。

私は、ただ単にmt.cfgのPublishCharsetの部分を変更すればOKと思っていたのですが、ログイン画面のところでエラーがでてきてしまって...

それで、ツールを使えばいいのかな?なんて思ってしまいました。

心機一転、tugaaさんに教えていただいた、Movable Type の文字コード変換スクリプトを利用してみることにしたのです。

これは、解凍したものを設置して、ただ実行するだけのとても簡単なものでした。

バックアップは注意書きにもあるので実行前に取りました。
データベースのバックアップは先ほどのmysqldmpで取ったファイル。
また、サイト全体のバックアップを取っておきました。

ダウンロードしたmt-convert-code.tar.gzを解凍すると、mt-convert-code.cgiというファイルがひとつだけできました。
これを実行すると、下記のように表示されますので、変換前のコードと、変換後のコードを指定します。

convert1.png

そして、Convertボタンを押すだけです...。

convert2.png

こうやって画面が出て...
コンテンツが少ないせいもあり、あっという間に完了してしまいました。

さて、気を取り直して、管理画面にログイン....

っと思ったら、先ほどと変わらないエラーが....(笑)

よく読んでみれば、Movable Type の文字コード変換スクリプトツールって、MT全体の環境を変更してくれるわけではなくて、
「Movable Type 3.0 のデータベースに格納されているデータの、文字コードの変換スクリプトのテスト版を公開します。」
だったのですね....。

今回はあきらめずに、先へ進みました。

ログイン画面に出てきたエラーは下記のようなものです。


Use of uninitialized value in split at /home/blog/public_html/lib/MT.pm line 869.
Use of uninitialized value in split at /home/blog/public_html/lib/MT.pm line 869.
Use of uninitialized value in split at /home/blog/public_html/lib/MT.pm line 869.
Use of uninitialized value in split at /home/blog/public_html/lib/MT.pm line 869.
Use of uninitialized value in split at /home/blog/public_html/lib/MT.pm line 869.
Use of uninitialized value in split at /home/blog/public_html/lib/MT.pm line 869.


これは、もうMT.pmの869行目を見るしかないですね....泣。

    859     sub translate_templatized {
    860         my $mt = shift;
    861         my($text) = @_;
    862         $text =~ s!<MT_TRANS ([^>]+)>!
    863             my($msg, %args) = ($1);
    864             while ($msg =~ /(\w+)\s*=\s*(["'])(.*?)\2/g) {  #"
    865                 $args{$1} = $3;
    866             }
    867             $args{params} = '' unless defined $args{params};
    868             my $enc = MT::ConfigMgr->instance()->PublishCharset;
    869             my @p = map MT::Util::decode_html($_),
    870                     split /\s*%%\s*/, MT::I18N::encode_text($args{params
        },$enc,'euc-jp');
    871             $mt->translate($args{phrase}, @p);
    872         !ge;
    873         $text;
    874     }

869〜870行目に
my @p = map MT::Util::decode_html($_),
split /\s*%%\s*/, MT::I18N::encode_text($args{params},$enc,'utf-8');

という部分があります。

この、最後のutf-8をeuc-jpに修正したら、エラーは出なくなりました。

ほかにも、lib/MT/L10N/ja.pmがUTF-8で書かれていたので、nkfを使ってEUCに変換したりしてみたのですが、メニューがEUCで表示されるものの、869行目のエラーが消えることはありませんでした。
(考えてみればアタリマエなのですが。)

※ja.pmはもとのUTF-8に戻しましたが、今は正常に表示されています。

やっと....

ここでログインして、再構築をしてみました。

index.htmlの先頭を確かめると....

!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" />
<meta name="generator" content="http://www.movabletype.org/" />

<title>はじめてのウエブログ♪</title>

となっていたので...これでとりあえずは成功!
と考えてよいでしょうか?

このエントリーが上手く登録されたら、とてもうれしいです:-)。

追記....
このあと構築中....のダイアログで、エントリーのタイトルが文字化けしているのを発見しました。
管理画面中の、ブログ名も文字化けしています。
ちなみに、DB内ではブログ名もEUCコードに正しく変換されています。
MTを最初からEUC-JPで構築した場合と、私のように途中から文字コードを変更した場合、どこが異なって、このような文字化け現象が起きるようになるのでしょうか...。
ぽつぽつ調べてゆきたいと思います...とほほ。

投稿者 megu : 2004年06月18日 19:03

コメント

コメントしてください




保存しますか?