CGI-BBS > CGI > Perl > 『[\0-\177]』『[\200-\377]』って文字コードですか?


カレッヂ
カレッヂ


質問者 なで  投稿日 1/15(月) 17:59:04
またまた質問に来ました。
よろしくお願いします。

$title =~ /(^|[\0-\177]+)([\200-\377]{2})*$key/i
       ~~~~~~~~~~  ~~~~~~~~~~~      
の[]で囲まれた数字は、文字コードを表しているんでしょうか?
で、[]って「文字クラス」を表すんですよね。
となると、2つが『=』で繋がらないんですよ。
やっぱり、文字コードではなく、違う意味なんでしょうか?
であれば、この文は、どういう意味になるんでしょうか???

よろしくお願いします。


回答者 しあわせのツボ  [削除]  投稿日 1/15(月) 19:29:57
もちろん文字コードです。
例えばよく見る\rや\nも、文字コードを使ってそれぞれ\015、\012と指定することもできます。
例の場合、文字クラス内の指定に文字コードを使用しているだけです。
それぞれ「コード0(\0)から(-)コード177(\177)」「コード200(\200)から(-)コード377(\377)」を表す文字クラスになりますね。
質問者 なで  [削除]  投稿日 1/16(火) 09:56:11
やっぱり。。。。。
文字コードですかぁ〜。はぁ〜。(かなり、苦手なんですぅ)

で、これは、
$title =~ /(^|[\0-\177]+)([\200-\377]{2})*$key/i
       ~~~~~~~~~~  ~~~~~~~~~~~      
S-JISってことでしょうか?
それとも…

それと、『[\200-\377]{2}』は、配列になってる意味なんですよね。
つうことは、この文自体は、
$titleと何がマッチしていることになるんでしょうか?

後、もう一つ…(いつも、いっぱいですいません。。。。)
このプログラムに使われているファイルは、全てEUCになっているんですが、
もし、S-JISだとしたら、文字化けとか起こらないのですか?

もう、文字コード自体、チンプンカンプンなので、
おかしな事をお聞きしているかもしれません。(すいません)
が、よろしくお願いします。


回答者 しあわせのツボ  [削除]  投稿日 1/16(火) 11:40:18
この{2}は配列ではありません。直前の文字が2つ連続、という意味です。

えっと、ここで言う文字コードは、コード体系でなくキャラクタ番号のことです。
EUC設置を指示しているならEUCというコード体系をもとにキャラ番号を指定しているはずですので、特に事情がない限り変更の必要はありません。
ただ、そのままSJISで設置すると問題が起きます。
質問者 なで  [削除]  投稿日 1/16(火) 18:02:52
> 直前の文字が2つ連続、という意味です。
そうなんですか。納得!

> コード体系でなくキャラクタ番号のことです。
??? キャラクタ番号って何でしょうか?
すべての文字に番号がついてるんでしょうか?
それは、S-JISはS-JIS。
EUCならEUC。JISならJIS。とついているんでしょうか?
すいません。勉強不足で…
なんだか、ぼんやりと分かったような、分からないような…
って感じなんです。

何か、参考になるHPや、書籍があったら、教えていただけますか?

お願いばかりですいません。
よろしくお願いします。
回答者 しあわせのツボ  [削除]  投稿日 1/16(火) 19:45:45
キャラ番号というのは便宜上の呼び方で正式な名前ではないことをお断りしておきます。
全ての文字には一意の番号が振られています(これをキャラ番号と呼びました)。が、それだけではそれが何の文字なのかは決まりません。
コード体系(SJISならSJIS、EUCならEUC)ごとに決められている対照表によって「対照表によればこのキャラ番号はこの文字」というのが判断され、それをもとに文字が表示されます。
なので、同じ文字でもコード体系が違えばキャラ番号は違いますし、逆にキャラ番号が同じでもコード体系が違えば別の文字を表します。
文字データにはキャラ番号しか入っておらず、コード体系が何なのかは通常はわかりませんが、そのあたりはマシンの中にいる小人さんが何とかして判断してる訳です。
で、\xxxで表されるのはキャラ番号です。
例の場合、$titleは予めEUCに統一されているでしょうから、EUCコード体系における対照表をもとに、Perlに「データがこのキャラ番号かどうか調べてね」と指示している訳です。
こんなものでわかるでしょうか。
質問者 なで  [削除]  投稿日 1/16(火) 23:38:27
はい。もう、凄く丁寧で分かりやすい説明をありがとうございました。
(物分りの悪い私、かなり感激ですぅ)

明日、早速、対照表で調べてみます。
(って、しあわせのツボさんが、見られるときは今日ですかね?)

少しですが、わかり始めてきたような気がして、
ちょっと楽しくなり始めました。
ほんと、しあわせのツボさんのお陰です。
ありがとうございます。

今後もまだまだ壁にぶつかって、突飛な質問をしにくるかもしれませんが、
呆れず、相手してやってください。

よろしくお願いします。


このページは終了したので返信(回答)は書きこめません

Web裏技