From: matz@... (Yukihiro Matsumoto) Date: 2000-09-25T00:38:40+09:00 Subject: [ruby-list:25150] Ruby I18N (Re: Re: file separator for Ruby in Windows) In message "[ruby-list:25136] Re: file separator for Ruby in Windows" on 00/09/24, TAKAHASHI Masayoshi writes: |高橋征義です。 | |matz@zetabits.com (Yukihiro Matsumoto)さん: |> そうですねえ。現時点では「Unicodeへの変換問題」や「Unicodeで |> 現に表現できないスクリプト問題」があるので、内部コードの文字 |> 集合にUnicodeを用いることにはちょっと抵抗があります。 |> |> 考えているのは | |いまいち意味が取れなかったのですが(汗;、 それは私の説明が悪いからでしょう。 |> * 現状の延長線。文字集合とエンコーディングを追加定義可能に |> する。 |> |> * エンコーディングはUTF-8に統一。入出力は適宜変換する。た |> だし、文字コードはUnicodeではなくオリジナル文字コードの |> ものをそのまま使う。つまりEUCの場合「あ」は0xa2a4としま |> す。 |> |> * 各文字に31bit使います(UCS-4相当)。ただし文字コードは(以 |> 下同文)。 |> |> * 文字集合はUnicode。エンコーディングはUTF-8(PerlやPython |> のやり方)。 |> |> * 文字集合はUnicode。エンコーディングはUCS-4(glibc?)。 | |それぞれをA案〜E案と呼ぶことにして、これを表にすると、 | | 内部の文字集合 Unicode文字列の EUC-JP文字列の | 内部encoding 内部encoding |A案 不特定 そのまま そのまま |B案 不特定 UTF-8に統一 そのまま(16bit) |C案 31bit UCS-4に統一 32bitに変換 |D案 ISO10646 UTF-8に統一 UTF-8に変換 |E案 ISO10646 UCS-4に統一 UCS-4に変換 | |というところでしょうか? なんか誤解しているような気もするの |ですが。 B案については後の「ひょっとして」が正解です。 B案 不特定 UTF-8に統一 UTF-8に統一 ですね。つまり文字集合はコードを31bitまでの範囲で表現できる 任意のものとして、エンコーディングだけはUTF-8(が使っている) ものに統一しましょう、というものなんですが。 実際Rubyで文字集合が意味があるのは * IGNORECASEで大文字小文字の判別 * 正規表現での文字クラス \s \w \d etc. だけで、かつ現状ではASCIIの範囲内でしか判別していません。つ まり、ASCIIのスーパーセットの文字集合という仮定をおけばEUC, SJIS, Unicodeともにこれを満たします)現状程度のサポートは簡単 ということになります。Perl5.6などがやっている文字名からコー ドを引くという操作はテーブルが必要になりますが。 |……ああああ、ひょっとしてB案は、「EUC-JPの場合、EUC-JPにUTF-8 |変換(と同等の変換)をかけたものにする」ということなのでしょうか? |つまり、0xa2a4が、0xea8aa4になる、というか。 |でも、EUC-JPって、UCS2のサロゲートペア用の領域も使ってしまう |ので、素朴にUTF-8風変換をすることはできないはずです。 え? そうなんですか? 私の理解ではUTF-8は31bitまでの任意の整 数を1から6バイトまでのマルチバイトで表現するものだと思ってま した。UTF-8のエンコーディング法(えーとFSS-UTFでしたっけ)は文 字集合と独立に使えるという私の考えが浅はかだったんでしょうか? まつもと ゆきひろ /:|)