[1189] Re:os
投稿者:(ぱ)こと管理人
2009/01/02 19:47:50
状況を整理してみます。
・Linux(Ubuntu 4.1.2-Oubuntu4)←私のところ
→utf-8, EUCともに正常動作
・Linux(Vine Linux 4.2)
→utf-8では正常動作
→EUCでは、test.dkmにてセグメンテーション違反
その他のスクリプトは、日本語を扱うarray.dkmのようなものを含め、
正常動作。
・MacOS
→utf-8では正常動作
→EUCでは、以下の現象が発生
・test.dkmの726行目の'本'という文字リテラルについて、ワイド文字に変換したら
2文字以上と解釈された。
・array.dkmの46行目の「"hogeほげ".length()」が6を返している。
また、47行目の「"hogeほげほげ".substr(3, 4)」が「eほ�」を返している。
念のため確認ですが、
・EUCで動かすときは、「diksam_0_4_02.unix.tgz」をダウンロードして、
これをtar xvzfで展開したフォルダにて、コンパイル、実行をしていますよね?
文字コードの変換等はしていないですよね?
・test.dkmやarray.dkmは、エディタ等で日本語部分を含めちゃんと読めていますよね?
その際、文字コードがEUCであることも、確認できていますよね?
MacOSの方はともかくとして、Vine Linuxではarray.dkmの日本語
関連の処理が正常に動いているので、実は文字コード云々は関係
なかった、というオチも考えたのですが、UTF-8版が正常動作して
いるなら、やはり何らかの文字コード関係の問題のようです。
うちには今遊んでいるPCはないので、Vineの環境はすぐには作れません。
お手数ですがそちらで以下のテストは可能でしょうか?
Vine Linuxにて、以下の修正を実施して、../diksam test.dkmで実行して、
セグメンテーション違反が出るかどうか、よければ試してみてください。
(1)test.dkmの720行目以降をコメントアウト(Diksamでは/* */で囲んでコメントアウト)
/*
println("日本語");
string str = "日本語";
for (i = 0; i < str.length(); i++) {
println("str[" + i + "].." + str[i]);
if (str[i] == '本') {
println("本");
}
}
exit(1);
println("これは出ない");
*/
(2)725~728行目のみをコメントアウト
string str = "日本語";
for (i = 0; i < str.length(); i++) {
/*
println("str[" + i + "].." + str[i]);
if (str[i] == '本') {
println("本");
}
*/
}
exit(1);
println("これは出ない");
また、うちのPCでは動かなかった、という方は他にいらっしゃらないでしょうか。
情報募集中です (_o_)