No. 210/622 Index Prev Next
Path: titcca!ccut!ascgw!cskvax!shige
From: shige@cskvax.csk.JUNET (Shigeki Yoshida)
Newsgroups: fj.kanji
Subject: Re: hankaku-kana to zenkaku-kana convertor
Message-ID: < 755@cskvax.csk.JUNET> 
Date: 26 Nov 87 13:42:47 GMT
References: < 2102@flab.flab.fujitsu.JUNET> 
Reply-To: shige@cskvax.csk.JUNET (Shigeki Yoshida)
Distribution: fj
Organization: CSK corp., Tokyo, Japan
Lines: 99
Posted: Thu Nov 26 22:42:47 1987

article < 2102@flab.flab.fujitsu.JUNET>  にて
	ichikawa@flab.flab.fujitsu.JUNET (市川さん) が:
> NKF改造(高速化)をしている(某Q門氏と競って)のですが、その副作用として(
> どんな作用だろ?)コード系が判明している時に、半角カナを全角にしてしまう
> フィルタが一夜にしてでけてしまいました。(実は二日:-)
> 
> でもって、せめてその一部だけでも投稿しようというのですが、
> 	1)いる人いますか。
> 
> カナを見るのにかなり手を抜いています。
> 
> つまり、変換テーブルを簡単にするため、0xa0-0xdfしかサポートしていません。

  ええと、通常の使用はこれで十分だと思いますので、どうせならASCII
を含めた、半角−>全角フィルターにしません? (言うのは簡単:−)

> そのために、ここで質問です。
> 
> はたして、半角カナを使う(あるいは、使ってしまう)人は、
> 0xe0-0xfeを使うのでしょうか?この領域は、パソコンなんぞでは、グラフィック
> キャラクタなんぞがあったり、"村"、"町"、"人"、"時"、"分"、"秒"なんぞを使
> 用できたりするわけです。いったい、この領域を使用しているのでしょうか。

  少なくとも私の周辺では使用していません。そんなローカルなコードまで考慮
しなくてもいいと思います。

> そりから、0x0e, 0x25, 0x0fの列が、JISとSJISでは0xa5と等価であるというの
> や、EUCでは0x8e, 0xa5であるというのは、これでいいですよね。

  これについてアレッと思ったので、ちょっと調べてみました。参考にしたのは、
ずっと以前(20 Feb 87)にfj.kanjiに流れた漢字のESC
コードについての解説と、bit別冊の「最新UNIX」です。

  これらの説明を読んで私が理解したのは、0x0e(SO)と0x0f(SI)
はそれぞれG0,G1バッファ(又は仮想プレーン)に「指示」してある文字
セットを{7単位環境に「呼び出す」・8単位環境の左側に「呼び出す」}ための
コードであるという事です。

        0x00     0x20          0x80     0xa0
	+------+ +----------+  +------+ +----------+
	|      | |          |  |      | |          |
	|      | |          |  |      | |          |
	|      | |          |  |      | |          |
	|  C0  | |    左    |  |  C1  | |    右    |
	|      | |          |  |      | |          |
	|      | |          |  |      | |          |
	|      | |          |  |      | |          |
	+------+ +----------+  +------+ +----------+
		    ^   ^
                    |   |
             +- SI -+   +- SO -+
             |                 |
             |                 |
	+----------+  +----------+  +----------+  +----------+
	|          |  |          |  |          |  |          |
	|          |  |          |  |          |  |          |
	|          |  |          |  |          |  |          |
	|    G0    |  |    G1    |  |    G2    |  |    G3    |
	|          |  |          |  |          |  |          |
	|          |  |          |  |          |  |          |
	|          |  |          |  |          |  |          |
	+----------+  +----------+  +----------+  +----------+


  そして、詳しくは分からなかったのですが、JISではデフォルトでG1に
半角カタカナを「指示」してある物とし、SI/SOでG0[ASCII/漢字]
とG1[カタカナ]を切り換えるという暗黙の了解で使っているようです。
(G0にASCIIを「指示」するか、漢字を「指示」するかが、いわゆる
  ESC(BだとかESC$Bなわけです)

  ところがEUC(ここではJAEで採用している日本語コードという意味で使い
ます)の場合、最新UNIXに書いてあるのは、

	G0	ASCII
	G1	JIS漢字コード
	G2	JIS1バイトカタカナ
	G3	外字コード

  という固定「指示」とするため、JISのような「指示」用のエスケープ
シークエンスは省略してあるということでした。しかもどうやらデフォルトで
G0−>左,G1−>右という「呼び出し」をしてある物として使うように
なっているらしく、G2とG3はシングルシフト(SS2,SS3)を1文字
毎につけて右側に「呼び出す」ことにしてあるという事でした。

  SJISの場合は御存じのようにこの規則には従っていません。

  そうすると、SI,SOで7ビットコードが半角カタカナになるのは、JISの
時だけという事になります。長々と説明してきましたが、要はこれが言いたかった
のです。(本音はSI/SOを考えたプログラムなんか作りたくないだけだったり
して:−)

  かなり省略した説明でしたので、分かりにくいかもしれませんが、最新UNIX
を読んでいただければ(P257〜260)わかって頂けると思います。

# おかげで、ESCシークエンスの意味とか、SS2の意味とかがよく理解
# できました。
-- 
(株)CSK・技術開発事業本部・商品開発部・吉田茂樹
					    shige@csk.JUNET
Next
Continue < 2138@flab.flab.fujitsu.JUNET>
< 766@cskvax.csk.JUNET>
< 1213@srava.sra.JUNET>