Tagged ‘文字化け’

MovableTypeをXREAからCORE SERVERへ

仕事の仮アップ用にMovableTypeもインストールしていたが先日のXREAからCORE SERVERへ移転でMySQLのデータが上手くバックアップできなかった。
まず、PhpMyAdminでバックアップしたデータが’(シングルコーテーション)が2重になってたり、表示などの文字に¥マークが付いたりしていた。
どう書き出しても同じ結果なので仕方なくエディタで検索しながら手作業でエラーが出ない形に整形して読み込ませた。何度か挑戦するとようやく読み込みに成功した。
MovableTypeを立ち上げて、管理画面を開くと文字化けだらけ。念のためPhpMyAdminでデータを確認したが正常に表示される。
前回のCORE SERVERでMySQLの文字化けと同じ現象だ、MySQL4(XREA)からMySQL5(CORE SERVER)に移転したのが原因だと思われる。
前回はPHPだったのでセーフティな対処法があったが、MovableTypeはPERLなので同じ事は出来ない。
/mt/lib/MT/ObjectDriver/DBI/mysql.pm

$driver->{dbh}->do(“SET NAMES sjis”);
を3箇所ぐらいに記載して無理矢理文字化けしないようにしたが、後で調べてみるとXREAのサーバーでMySQL5を使っているとMovable Type4をインストールするとそれまで使っていたデータベースのデータが文字化けするようだ。という記事を発見した。
/mt/mt-config.cgi

SQLSetNames 1
とするだけで良かったみたい。
「mysql.pm」を元に戻して「mt-config.cgi」を修正したらすんなり表示できた。
ソースを見る限りやることは同じだけど、オフィシャルのやり方なのでコッチの方が安心だ。

CORE SERVERでMySQLの文字化け

作業量を計る為に日報を書くプログラム(PHP+MySQL)を作っていたが、今回のXREAからCORE SERVERの引っ越しで文字化したので調べてみた。
PhpMyAdminから入力した文章は自作PHPで文字化けし、
自作PHPから入力した文章はPhpMyAdminで文字化けしてる状態だ。
最初は明らかに古いPhpMyAdminがインストールされたので怪しいと思ってバージョンアップしてみたが何も変わらない。phpinfoとかも見てみたが大丈夫だ残るはmySQL。telnetでログインして文字コードが何なのか調べてみる事にした。

> cd /
> mysql -u ユーザー名 -p
mysql> SHOW VARIABLES LIKE 'cha%';
+--------------------------+---------------------------------------------------+
| Variable_name            | Value                                             |
+--------------------------+---------------------------------------------------+
| character_set_client     | latin1                                            |
| character_set_connection | latin1                                            |
| character_set_database   | utf8                                              |
| character_set_filesystem | binary                                            |
| character_set_results    | latin1                                            |
| character_set_server     | utf8                                              |
| character_set_system     | utf8                                              |
| character_sets_dir       | /usr/local/mysql-src-5.1.22/share/mysql/charsets/ |
+--------------------------+---------------------------------------------------+

とlatin1(ラテン)が混じっていた。もちろん管理画面からmySQLを作成する時にUNICODEで作成してる。
一体何を考えてlatin1のまま放置してるのか分からないが、共用サーバーではこの設定を変える事は出来ない。
検索するとset names utf8以外の文字化け対策ってのを見つけた。
CORE SERVERはPHP5.2.5なので
mysql_set_charset(‘utf8’);
を追記した。するとバッチリ直った。
ただ、毎回CORE SERVERの為だけにコレを書く必要があるしオープンソースなソフトをインストールする時にややこしい事になりそうだ。

波線と全角チルダ

機種依存文字で今まで使えなかった丸文字やローマ数字などがユニコードのおかげで文字化けせずに使える様になった。(とはいえ、MSゴシックでは文字がつぶれて読めない場合が多いが・・・)
但し、ユニコードに対応していてフォントに使用する文字がフォントにその文字がある必要があるが、ユニコードに対応してないとブログが見れないって事になるのでそんなブラウザを使用している人も少ないだろう(携帯を除く)、フォントの問題も余程変わった文字を使わない限りあると思うが、殆どのサイトは機種依存文字を避けているのが現状だ。
ただ、ユニコードのおかげで波線(〜:腠)と全角チルダ(~:~)の区別が出来て、その文字を使うとShift-JISやEUCなんかで文字化けする事が起きた。
そもそも、全角チルダはあくまでチルダ(~)の全角バージョンなので「オラ~~」とかの使い方は間違いで「オラ〜〜」が正解らしい、「東京~大阪」も間違いで「東京〜大阪」が正解。
何故こんな間違いになったかというとWindowsやMac(OS9)で使用されている文字コード(Shift-JIS)には波線が無いから全角チルダを使っていたのが原因なのだがOSXになり文字コードがユニコードになったので正しく波線を入力する人が現れた為、混在する事になった。
波線の方が正しいのかもしれないが文字化けする可能性があるし、MSゴシックでは汚く表示されるので全角チルダに統一して欲しい。