>私が問題にしているのは、Test.dkmの726行目
> if (str[i] == '本') {
>の解釈で、WindowのCYGWINのGCCが作成した実行部は2バイト文字として
>文字リテラルを解釈しているのに、MacのGCCで作成した実行部は文字リテラル数が
>複数あるとしてエラーとしていることです。
まず、Diksamでは、"あいうえお".length()は5を返しますし、"あいうえお"[3]の
値は'え'である、というのが仕様です。つまり、Diksamでは、文字列は「バイトの
並び」ではなく「文字の並び」です。この「文字」は、日本語であっても、
1文字は1文字として解釈されなければなりません。
よって、実行に成功していれば、test.dkmにおける以下のコードの実行結果は、
string str = "日本語";
for (i = 0; i < str.length(); i++) {
println("str[" + i + "].." + str[i]);
if (str[i] == '本') {
println("本");
}
}
以下のようになるのが正解です。
str[0]..26085
str[1]..26412
本
str[2]..35486
ところが、青餓鬼さんの環境では、str.length()がEUCではが6, UTF-8では9に
なっています。これはマルチバイト文字からUNICODEへの変換が行われておらず、
単にバイト列として読み込まれているように見えます。
マルチバイト文字からUNICODEへの変換処理はロケールに依存するので、
環境変数LANGの値はどうなっているのかが気になっているわけです。
とはいえ私はMacは持っておりませんしOS-Xを使ったこともないので、
見当はずれのことを書いている可能性はあります。詳しい方ご指摘ください。
過去MacOSで動かした人はいたはずだったよな、と思い掲示板の過去ログを
探したところ、以下の投稿が見つかりました。
http://kmaebashi.com/bbs/list.php?boardid=kmaebashibbs&from=1196&range=1
なぜか当時追及しなかったようなのですが、Windowsと同じようには動いていませんね。
この出力だけ見ると、ワイド文字に変換した結果がShift-JISになっているように
見えますが、いくらなんでもそんなはずは……