From: Nobuyoshi Nakada Date: 2007-09-06T15:43:45+09:00 Subject: [ruby-dev:31745] Re: string literal encoding なかだです。 At Mon, 3 Sep 2007 16:34:12 +0900, Yukihiro Matsumoto wrote in [ruby-dev:31723]: > |JRubyでは、Unicode系以外の文字列はどういう方針になるんでしょうか。 > |なんとなく、binaryについてはbyte arrayという話を見掛けたような気 > |もするんですが。 > > JRubyでは基本的に内部コードに変換するポリシーになると思いま > す。で、バイナリが必要な場合には明示的にバイナリと指定するの > だと思います。内部的に実装を切り替える(通常文字列はJavaの > Stringを使用、バイナリ文字列はbyte array。表面的には同じクラ > スに見える)と聞いています。 つまり、指定されていない限りASCIIのみの文字列にもUTF-16を使うと いうことでしょうか。 > |もしすべてUTF-16で実装するなら、String#encodingは常に"UTF-16"を > |返すんでしょうか。 > > そうだと思います。 > > |それならそれでcoding:で指定したものとは一致す > |るとは限らないわけで、気にすることはないようにも思えます。 > > codingで指定したものと一致しないのはそれはそれで構わないので > すが、「ASCIIしか含まないものはASCII(≒バイナリ)という仕様」 > はJRuby的に取り込みにくいんじゃないでしょうか。UTF-8と違って、 > 通常文字列(UTF-16)とバイナリ文字列(ASCII)の互換性を維持する > のが困難だと思いますから。 JRuby的には「ASCII≠バイナリ」ということでいいんじゃないでしょう か。もしそうであれば、ASCIIのみでも非ASCIIを含んでいても文字列リ テラルは常にJava Stringで、結合や比較は問題なく行えるはずです。 逆に「ASCII(≒バイナリ)=byte array」ということであれば、そういっ たbyte array/Java String間の変換は、リテラルに限らずしばしば必要 になるはずで、リテラルについてだけ気にしてもしょうがないと思いま す。 妥協点として、「ASCIIしか含まないものはencoding="ASCII"」まで規 定せずに、「リテラルのencodingは最大公約数的なものを使う」くらい でどうでしょうか。ASCIIベースの実装ならASCII/binary、UTF-16ベー スならUTF-16ベース。でないと実際にはかえって不便でしょうがなくな ると思うのですが。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦