68user's page 掲示板

Prev< No. 2177〜2193> Next  [最新発言に戻る] [過去ログ一覧]
No. 2177 # かな 2001/10/05 (金) 13:34:44
すいませんでした。
以後気を付けます。。

No. 2178 # SA [E-mail] 2001/10/05 (金) 14:54:15
はじめまして。

ネットワーク関係の関数でちょっと質問なのですが。

inet_aton(hostname)になっていますがこれをinet_aton (ipaddres)
にしても問題はないのでしょうか?

hostnameが解決されていない場合、IPアドレスをそのまま
使用してみたのですが表面上問題はでていませんが、
内部的にどうかまで分からなかったので。

どなたか教えて下さい。

分かり難い内容の書き込みになってすみません。

No. 2179 # /tk 2001/10/06 (土) 00:15:42
>>2176 68user
> # たしか両方の長さが一致したら、EUC-JP とみなされたと思う。
一致した場合は undef では?

> いいえ、@a[0] はスライスを使っているわけではありません (よね?)。
> perl がおせっかいなので @a[0] -> $a[0] という読み替えをしている
> だけです。
http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
を読んだうえでの僕の解釈は

@a[0] はスライスです。
但し, 要素数が 1 のリストであり, スカラー値ではありません。
たまたま @a[0] をスカラーで評価したときに, その最後の要素である
$a[0] が返されただけです。

となるのですが
例によって勘違いしている可能性大です。

No. 2180 # TOM 2001/10/06 (土) 01:37:19
>>217668user
68userさん
インターフェイスの変更は、ありませんので
ライブラリ利用側を再コンパイル・再リンクせずに利用できました。

回答ありがとうございました。

No. 2181 # 2001/10/06 (土) 12:31:57
/tkさんが教えてくれた↓のページを読むと,
> http://www.mikeneko.ne.jp/~lab/kcode/jcode.html#h2-1

・convert()は内部ではgetcode()を自動的に呼び出し文字コードを判断する
・getcode()では,半角カナは文字コードの自動認識の判断対象からはずされる

とあります。また,スナフキンさんが
> そこそこの長文を表示すると、うそのように表示される場合が有りました。

と言われたように,私の場合も半角カナ以外の文字をある程度以上追加すると
文字化けしないことがあります。
例)アイウエオ(半角)         →竺軸宍雫七(全角)
        アイウエオ(半角)あいうえお(全角)→アイウエオ(半角)あいうえお(全角)

これらのことから,今回の文字化け現象の原因は,convert()が
(正確にはgetcode()が)半角カナの文字コードを
正確に判別できていないことのようです。

これを調べるためにコンバートの前後でgetcode()をかけてみました。

$code1 = &jcode::getcode(\$str);
jcode::convert(\$str, 'euc');
$code2 = &jcode::getcode(\$str);

その結果,次のようになりました。

$str = 'あいうえお'     → $code1 = 'euc',$code2 = 'euc'
$str = 'アイウエオ(半角)' → $code1 = 'sjis',$code2 = 'euc'

つまり,getcode()は半角カナの「アイウエオ」をsjisと判定して
sjisをeucに変換する処理をしていたのです。

長々と書きましたが,68userさんが書かれたように,
> Shift_JIS の半角カナと EUC-JP を正確に
> 判別することはできないので、EUC-JP な半角カナを Shift_JIS の
> 文字列だと誤認してしまい、EUC-JP に変換しようとする、ということは
> あります。

ということのようです。

で,ここでどうするかというプログラム上のアイデアが問われるのですが,
(残念ながら例の本には載っていません・笑)
今は,「$strに全角文字を数個追加して,コンバート後にそれを除く」ということを
考えています。
ただ,自分でもかっこ悪いなぁと思うので,他にアイデアがあれば教えて下さい。


>>2176 68user
> いいえ、@a[0] はスライスを使っているわけではありません (よね?)。

私は/tkさんが教えてくれたページを読んでスライスを覚えたので
No.2179の/tkさんと同じ解釈をしたのですが,
この解釈の違いによって,使い方とその結果が変わるということが
ないのであれば,あまり本質的な問題ではないような気がします。
68userさんが正しい知識を教えようとしてくれる気持ちはとてもありがたいです。

No. 2182 # シイ 2001/10/06 (土) 13:36:53
シイ

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 2183 # shii 2001/10/06 (土) 13:43:10
すみません。下の書込は私,椎です。
今回のことがあって,名前のような文字数が少ないフォームへの
日本語の記入に抵抗を感じたので,
これから椎はやめてshiiにしようと思います。

No. 2184 # 68user 2001/10/08 (月) 00:53:21
>>2178 SA
> inet_aton(hostname)になっていますがこれをinet_aton (ipaddres)
> にしても問題はないのでしょうか?
問題ないと思います。FreeBSD では inet_aton と inet_addr は同じ
関数になってます。
# http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/net/inet_addr.c?rev=1.12.2.1

>>2179 /tk
> @a[0] はスライスです。
ん〜、(@a)[0] とは違うということですか?

>>2179 /tk
> 一致した場合は undef では?
>>2181
> ・getcode()では,半角カナは文字コードの自動認識の判断対象からはずされる
そうでしたっけ…。昔 jcode.pl を読んだときはそうじゃなかった
ような気がしますが、読み違えていたのかもしれません。

> 今は,「$strに全角文字を数個追加して,コンバート後にそれを除く」と
> いうことを考えています。
追加する全角文字のエンコーディングを EUC-JP にするか、Shift_JIS に
するかが問題です。どちらか決めるためには追加対象文字列のエンコーディングを
自動判別しなきゃいけません。で、それが正確にはできないので…と堂々めぐりです。

まぁ、元のフォームが EUC-JP であるということなので、
    /([\x00-\x7F]|[\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE][\xA1-\xFE])*/
にマッチすれば EUC-JP として解釈できる文字列である、ということですから
無変換、でいいと思います。
# jcode.pl は汎用ライブラリですからそうもいきませんが。

> すみません。下の書込は私,椎です。
名前の部分にカーソルがある状態で Enter を押しても書き込み
しないようにすればよいのかな? (どうやるのかさっぱりわかりません)

No. 2185 # shii 2001/10/08 (月) 09:10:35
>>2184 68user
> 追加する全角文字のエンコーディングを EUC-JP にするか、Shift_JIS
> にするかが問題です。
半角カナ「アイウエオ」の場合,後ろにスペースを3つ追加するだけで
上手くいきました。多分,全角文字なら判別対象になるので,
それをある程度の長さで追記すればいいのかなと思いました。そこで,
html側で別に送った全角文字を追加して判別するつもりでした。

ただ,こちらの掲示板では短い半角カナの「シイ」を判別できたので,
jcode.plのせいではないようです(私の方ではシイも化けました)。
cgi-lib217.plを使っているせいかも……?

人様のプログラムの改造から使い始めたPerlですが,
以前に比べればいろいろなことがわかってきました。
上述のことを確かめる意味でも,
自分が理解できる範囲で1から作り直してみることにします。
(jcode.pjは深く考えずに使いますが……(^^;)
それを検証できたらまた報告しますね。

No. 2186 # スナフキン 2001/10/09 (火) 01:43:48
>>2174
>イメージできないんですが,具体的にどんな場合でしょうか。
すみません、よく読んでいませんでした。
CGIで出力するページソースの中の日本語コメントがSJISでEUCに変換
した日本語を同時に出力と言うケースでしたが、shiiさんの場合は
まったく違うようですね。


>>2176 68user
サーバーサイドという事は常駐システムですね。
さすが68userさん(笑)

自分も先日初心者用のCD付き本を買ってきて、JDKをインストールして
みましたが、いきなりサンプルの Hello! が動かないトラブルで、
既にめげています(笑)

ざっと見た感じでは、関数類を覚えれば特に難しく無さそうな感じも
しますが、甘いかな?(^^;
もしよければ、お勧めの初心者向けサイトを教えてくれると嬉しいです。

>2184
>名前の部分にカーソルがある状態で Enter を押しても書き込み
こういう事でしょうか?

<HEAD〜内
<SCRIPT LANGUAGE="JavaScript">
<!--
function submit_check(){
  if(!document.FORM.elements.MESSAGE.value){
    alert("メッセージを記入してください。");
    return;
  }
  if(!document.FORM.elements.NAME.value){
    alert("名前を記入してください。");
    return;
  }

  document.FORM.submit();
}
//-->
</SCRIPT>

<FORMへ
<FORM METHOD=POST ACTION="$script_name" NAME="FORM" OnSubmit="submit_check();return false;">
外してます?

No. 2187 # SA [E-mail] 2001/10/09 (火) 08:46:43
>68userさん

ありがとうございました。
IPアドレスで使用していきます。

No. 2188 # shii 2001/10/09 (火) 22:42:19
cgi-lib217.plを使わずにreadで読んでやってみましたが
やはり文字化けしました。引き続き調査中です。

No. 2189 # ふくし [E-mail] 2001/10/10 (水) 15:13:48
すいません、また怪奇現象が起こったのでお力をお貸しください。

Excel のワークシートを単純に <a href> タグでリンクすると
クリックすると中が見えてしまう(文字化けの文書として開こうとする)ので、
いぜん別の場所で教えてもらった方法をアレンジして
下のような CGI スクリプトで行っています。

--- download.cgi ---
#! perl

$arg = $ENV{'QUERY_STRING'};
$arg =~ /name=(.*)/;
$excelfile = $1;

$pwd = `pwd`;
chomp($pwd);

unless (open (FL, $excelfile)) {
        print "Content-type: text/plain\n\n";
        print "error opening $excelfile because $! at $pwd";
        exit;
};

print <<HEAD;
Content-type: application/octet-stream
Content-disposition: attachment;filename="$excelfile"

HEAD

print <FL>;
close(FL);
-------------------

これを、
<a href="http:.../cgi-bin/download.cgi?name=test.xls">ここをクリック</a>して xls ファイルを、、
のように呼び出そうという寸法です。

これが、場所によって挙動が異なるのです。

project
| cgi-bin
| | download.cgi
| subproj1
| | aaa.html
| | xxx.xls
| subproj2
| | subdir
| | | bbb.html
| | | yyy.xls


ここで、
http://org/~project/subproj1/aaa.html として見える aaa.html の中に、
<a href="http://org/~project/cgi-bin/download.cgi?=xxx.xls">XXXをダウンロード</a>
と書くとうまくいくのですが、
http://org/~project/subproj2/subdir/bbb.html の中に、
<a href="http://org/~project/cgi-bin/download.cgi?=yyy.xls">YYYをダウンロード</a>
と書くと、
error opening yyy.xls because No such file or directory at /.../project/cgi-bin
と表示されます。
パスが何らかの理由で見えないのかと思って
<a href="http://org/~project/cgi-bin/download.cgi?=../subproj2/subdir/yyy.xls">YYYをダウンロード</a>
と書くと、なんと download.cgi という名前でファイルを保存しようとします。
保存して中を開けてみると、中身はなんと yyy.xls!

1回目の実験は xxx => yyy の順番で行ったので、
何らかのキャッシュが行われているのかと思い、yyy => xxx の順で行っても同じです。

ということでよろしくお願いします。
サーバー側は FreeBSD 2.2.8-RELEASE+Apache(Apache のバージョンの見方がわかりません、、)、
クライアント側は Windows2000 Server+NC4.51 および IE6 です。

No. 2190 # ふくし [E-mail] 2001/10/10 (水) 16:15:59
↓下の件ですが、Apache は 1.2.5 だと管理者からメールが来ました。

No. 2191 # 68user 2001/10/10 (水) 18:03:20
>>2185 shii
そうですか、できましたか。どうも僕だけ話をわかってなくて
間違ったことばかり言っているようです。すみません。


>>2189 ふくし
download.cgi が実行されたときのカレントディレクトリは、download.cgi のある
ディレクトリになっているはずです。

よって、cgi-bin/xxx.xls も cgi-bin/yyy.xls もないので両方失敗するはずです。
なのに xxx.xls だけ成功するということは、cgi-bin/ の下に xxx.xls だけファイルが
置いてあったとか、シンボリックリンクが張ってあったとかいうオチではないかと
思うのですが、いかがでしょうか。


>>2186 スナフキン
> サーバーサイドという事は常駐システムですね。
うーん、CGI を常駐システムと呼ばないのと同じで、Java Servlet も
常駐システムとは呼ばないと思います。

> ざっと見た感じでは、関数類を覚えれば特に難しく無さそうな感じも
> しますが、甘いかな?(^^;
いや、そんなもんじゃないですか? 標準クラスライブラリを組み合わせて
パズルのようにプログラムを組み上げて行く感じです。

書き込みミスをした原因は
>>2184 68user
> 名前の部分にカーソルがある状態で Enter を押しても書き込み
> しないようにすればよいのかな?
のせいですか?>shii さん

もしそうなら
>>2186 スナフキン
> <FORM METHOD=POST ACTION="$script_name" NAME="FORM" OnSubmit="submit_check();return false;">
を組み込みます。

No. 2192 # ふくし [E-mail] 2001/10/10 (水) 19:34:53
>68user さん

すいません、、xxx.xls がなんかのはずみで cgi-bin に
入ってました、、いつもすいません、、。

../ で cgi-bin に遡れないんですね。
(download.cgi として yyy.xls が保存できたのがわからんが、、)
cgi-bin の下に project に対するシンボリックリンクを張って
解決しました。

No. 2193 # shii 2001/10/10 (水) 21:23:39
>>2191 68user
> そうですか、できましたか。どうも僕だけ話をわかってなくて
> 間違ったことばかり言っているようです。すみません。
え。何も間違ってないですよ(と,思うのですが)。
私の書き方がわかりにくかったらすみません。
というか私が無知で,68userさんが書いていることを理解できて
いないような気がします。

> 書き込みミスをした原因は
申し訳ないと思いつつ,半角カナを試させていただいたのです。
ですから書き込みミスではありません。すみません。
プログラム上は同じ事をやっている気がするのに,
どうしてこちらの掲示板では半角カナを判別できるのか
が現在の謎です。
ちなみに,
私のCGIでは「シイ(半角)」が「鴫」と化けます。
有名なTeaCupの掲示板でも同じように化けました。

私がこちらのソースを見ただけでは,わからなかったのですが,
コード判別で何か特別なことをされていますか?

私のjcode.plのバージョンはv 2.3 1997/02/23ですが,
バージョンのせいってことがあるのかな……?

Prev< No. 2177〜2193> Next  [最新発言に戻る] [過去ログ一覧]