K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>>私が問題にしているのは、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になっているように >見えますが、いくらなんでもそんなはずは…… >
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!