Deprecated: Function ereg() is deprecated in /virtual/bsakatu/module/xml_declaration.inc on line 4
メモ帳日記 : FULLWIDTH TILDE 2
  1. メモ帳日記 >
  2. PC >
  3. xyzzy >
  4. FULLWIDTH TILDE 2

メモ帳日記

日記書いたりメモ書いたり

2006年 7月 30日(赤口

FULLWIDTH TILDE 2

なんか昨日の方法じゃあ,Movable Typeの管理画面で見たときに「〜」のままで気にくわなかったので,mapae for xyzzyでも管理画面でもblogでもちゃんと「~」が表示できるようにしてみた。

いろいろやってみたけど,どうもMovable Typeの管理画面から投稿するときは何ともない。でも,mapaeから投稿するときは「~」が「〜」に変わっちゃう。で,調べるとmapaeが悪いみたい。というか,mapaeを用いる際にxyzzy (shift_jis) → perl (euc-jp) → XML-RPC (utf8) って感じに文字コードを変換してて,その過程で結局shift_jis→utf8をやっちゃってるから今回の問題が起こってるみたい。それならば,というわけでmapae.plに強引にそこを変えちまうコードを書いてみた。

書いたコードは,まぁ,mapae内部での文字コード変換の途中でごにょごにょするという感じで,詳細は以下。

*** d:\program\xyzzy\mapae\mapae.pl.bak	Mon Oct 17 23:19:09 2005
--- d:\program\xyzzy\mapae\mapae.pl	Sun Jul 30 22:42:16 2006
***************
*** 292,302 ****
--- 292,314 ----
    $to   = $CHARSET{$to} || _fault("$to charset is undefined..");
    for (@str) {
      if ( $CONVERTER eq 'Jcode' ) {
+ 		if ($from eq "utf8"){
+ 			$_ =~ s/\x{FF5E}/\x{301C}/go;
+ 		}
        Jcode::convert(\$_, $to, $from);
+ 		if ($to eq "utf8") {
+ 			$_ =~ s/\xE3\x80\x9C/\xEF\xBD\x9E/go;
+ 		}
      } else {
+ 		if ($from eq "utf8"){
+ 			$_ =~ s/\x{FF5E}/\x{301C}/go;
+ 		}
        $_ = Encode::decode( $from, $_ )
  	unless ( Encode::is_utf8($_) );
        $_ = Encode::encode( $to, $_ );
+ 		if ($to eq "utf8") {
+ 			$_ =~ s/\xE3\x80\x9C/\xEF\xBD\x9E/go;
+ 		}
      }
      _fault("Cannot convert charset from $from to $to.")
        unless (defined $_);

もうちょっときれいに書けそうだけどこれ以上はわからんからやめ。終わりよければすべてよし。

この方法は、Windows のふざけた仕様に合わせたものであり、本来的にはよろしくない。見た目だけを優先した、完膚無きまでの妥協策。現時点において、私はこの方法を採用しないで無変換のまま (波線は U+301C) でやっている。ただし、それなりの期間、U+FF5E を波線扱いして使っていたことと、U+FF5E を使う必要性はほとんどないことから、データベースから mapae に読み込むときに U+FF5EU+301C に変換している。どうしても U+FF5E を表示したいときは、数値実体参照している。