[PHP-dev 275] I18N/M17N for scripting language

TAKAHASHI Masayoshi php-dev@php.gr.jp
Tue, 02 Apr 2002 12:54:37 +0900


高橋征義です。こちらでははじめまして。

さて、遅ればせながら藤本さんによる[PHP-dev 250]を読ませて
いただきました。で、他のスクリプト言語のI18N/M17N対応に
ついて少し(でもないかも……)書かせてください。


まず、Rubyの国際化についてですが、さすがに2年前の状況は古
いです(^^;  いや、現在のRuby1.6ではこれ以上のI18N/M17N
対応は行われない予定ですが、早ければ1.8.xで、遅くとも2.0
までには大幅な変更が行われる予定です。

RubyでのM17Nに対する試みは、ruby-m17nというブランチで行われ
ていました。こちらでは、

 * 暗黙の変換は行わない

という前提のもと、

 * 内部エンコーディングとしては特定のものを仮定しない
 * ただし、なんでも使えるわけではない。現状では「stateless」かつ
   「先頭バイトを見れば1文字のバイト数が分かる」という仮定を置く
   ことになりそう。よって、EUC-JP、Shift_JIS、UTF-8、ISO-8859-1
   とかはいけそうだけれどが、ISO-2022-JPは無理。ただし、UTF-16
   は特別扱いで扱えるようにする可能性もあるかも。
 * 内部エンコーディングが自由な代わりに、文字列(String)クラスの
   APIを統一させ、そこで最低限のこと(長さ取得とか)は行えるように
   する。各エンコーディングの構造体にこれらの関数へのポインタが
   ある、という実装です。
 * スクリプトのエンコーディングについては、実行時のコマンド
   ラインオプションに加え、何らかのpragmaを使えるようにする
   (詳細は未定、でもPython風に合わせるかも?)
 * 各Stringオブジェクトにはエンコーディングの情報を持たせる

といった方針になっていました。
ruby-m17nの実装は、RubyのHEADとは分離した形で行われました。
これはRubyのCVSから持ってこれます(rubyレポジトリのruby-m17nブランチ)。
http://www.ruby-lang.org/ja/cvsrepo.html
http://cvs.ruby-lang.org/~knu/cgi-bin/cvsweb.cgi/ruby/?only_with_tag=ruby_m17n

私があれこれ書くより、こちらを見た方が早いかと。

なお、ruby-m17nの成果が現在のRubyに反映されるのがいつになるのは
未定です(当初は1.8.0で取り込まれる予定だったのですが、それはなさ
そうです)。拡張ライブラリへのAPIも含めた使い方が整理されれば、
取り込まれる予定です。


ついでにPerlとPythonについても軽く触れておきます(こちらはあまり
詳しくないです(_o_))。

Perlについては、Perl5.xでは、マルチバイトとしてはUTF-8を
中心に行われている様子です。現在でもIO周りでのencoding
変換などは行えます。
# Perl5の開発状況がどうなっているのかは把握できてません(_o_)

そして、本格的な国際化対応は、Perl6で行われる予定です。が、
正直なところ、実装がどうなるかはまだ見えてきてないように思います。
Larry Wallは、Perl6では文字は単なる数値列のようにして、encodingは
自由に扱えるようにする、とか言ってましたが、ParrotのMLではまずは
Unicode(UTF-8)をベースにしたがっているような雰囲気がありました。


Pythonについては、内部エンコーディングとしてはUnicode決め打ち
でしょう(少なくともPython2.xでは)。IOなどのエンコード変換に
ついてはCodecのフレームワークがあるのでそれを使います。すでに
日本語にも対応しています。変換テーブルは固定です。
http://www.python.jp/Zope/download/JapaneseCodecs
↑ここからもリンクされている、
  Python Unicode Integration
  http://www.lemburg.com/files/python/unicode-proposal.txt
  が、Pythonの国際化(というかUnicode化)の基本方針だそうです。

Pythonのスクリプトのエンコーディングについては、そのためのPEPが
出ています。これもpragmaで指定するようです。
http://python.sourceforge.net/peps/pep-0263.html

--------------

ところで、PHP5はXML化したりしないんでしょうか? そうすると、
少なくともCCSとしてはほぼ自動的にISO 10646ベースになる(なら
ざるを得ない)ように思うのですがどうなんでしょうか。

PerlやPython、Rubyとは異なり、PHPはスクリプトの外側にタグを
使うことに抵抗はないと思うので、PHPならそれもアリかなあ、
と思っていました。(X)HTMLの中にPHPのコードを埋め込む場合でも、
(X)HTMLでのテキストのエンコーディングと埋めこまれたPHPのコード
のエンコーディングが異なることはないでしょうし。

# i-mode絵文字とかはPUAに突っこむとか。
# ちなみにXMLにするというか、スクリプトを「<?xml」で始めることに
# すれば、UTF-16でもUTF-32でも自動認識はほぼ可能です。というか
# XML 1.0 Recに書いてあります(^^;
# http://www.w3.org/TR/REC-xml#sec-guessing

長文失礼しました。参考になれば幸いです。それでは。


高橋征義 (TAKAHASHI Masayoshi)       Email:maki@inac.co.jp