UNICODEにまつわるいろいろ

  • 投稿日:
  • by
  • カテゴリ:

ひや~んの日記から

私のmixiの日記欄からアクセスすると、我が「ポルスタ」のトップページへ行ってしまう問題。 日記のRDFにある「~」という文字が、mixiの方で何故か「?」に置換されてしまっているのが原因です。

えーと、どうしてこうなるのか。ですが、どこかでUNICODEに変換されているのが原因です。

ひや~んのRDFでは、encoding="Shift_JIS"と指定されています。これを手元に保存し、たとえば、以下のようなperlのプログラムで処理しようと思います。

use XML::RSS;
my $rss = new XML::RSS;
$rss->parsefile("index.rdf");
# print the title and link of each RSS item
foreach my $item (@{$rss->{'items'}}) {
  print "title: $item->{'title'}\n";
  print "link: $item->{'link'}\n\n";
}

このとき、perlでは、Shift_JISというencodeは利用出来ないので、XML::Parser モジュールをインストールするともれなくついているJapanese_Encodings.msgを読んで、index.rdfのencodeingを変えてやる必要があります。

たとえば、encoding="x-sjis-unicode"と設定した時と、encoding="x-sjis-cp932"と指定した時では、違う結果が出てきます。それこそ、今回問題になっている、チルダのところだと思います

さて、どうして、こういうことが起きるのか。ですが、それこそ、Japanese_Encodings.msgに書いてあったりします。ところが、英語なので読むのが面倒です。河合さんの訳が、河合さんのPerl XMLでencoding='Shift_JIS'や'euc-jp'を使うのページで配布されています。

このあたり、従来の文字コードとUnicodeの対応に関する諸問題にまとめられているのですが、ようするに、半角円記号と半角バックスラッシュの問題が大きくなって帰ってきているわけで、これを技術的に解決するのは容易ではないでしょうね。

さて、回避策ですが

  1. ~%7Eと表記する
  2. Shift_JISではなくUTF-8で記述する

の2通りあるように思います。

こういうのってあっちこっちで問題になるように思うんだけど、どうやって解決してるんだろうなぁ。おしえて!>えらいひと。